问题标签 [ninject-extensions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Ninject 工厂扩展和 InCallScope 未给出预期结果
我正在努力使用 Ninject 的工厂扩展。
将扩展与 InCallScope 结合使用时,我希望从工厂的 create 方法返回相同的实例,但我得到了两个不同的实例。
我误解了 InCallScope 概念还是需要添加其他内容?
c# - Ninject 3.0.1.10 + 工厂扩展没有 tofactory 方法
我将 Nineject 用于 .NET ioc 容器。我想使用工厂方法,但我不能。没有 .ToFactory 方法。
我为 .NET 3.0.1.10 添加了 Ninejct 的 Ninject.Extensions.Factory 扩展,并将 CastleCore 3.0 添加到项目中,然后我想调用 ToFactory 方法,但我没有看到它。
有,ToMethod,ToProvider 方法,但是没有 ToFactory
我试过这段代码:
这样
为什么我无法调用 ToFactory 方法?
我看到 NuGet 为 .net 安装了 ninject 3.0.2 prelease ninject
ninject - Ninject Factory - 传入“新”对象,而不是在工厂方法中调用的对象
我正在使用 Ninject Factory Extensions,以便我可以创建具有注入服务和自定义值的对象
所以:
然后在模块中:
实际的工厂被注入到类的构造函数中,然后像这样使用:
其中 _artifact 是 GameArtifact 类型
然后在每个实现的构造函数中注入服务和传入的对象。GameArtifact 在第一个构造函数中成功传递,在第二个构造函数中传递了一个“新的”GameArtifact,即不是空的,而是只有默认值的,就好像刚刚调用了框架一样
而不是传入已经存在的!
这两个对象的构造函数非常相似,但不起作用的那个看起来像:
工厂和服务由 Ninject 注入,而 ga 应该通过工厂传入。
任何人都知道为什么传入一个新的“新鲜”对象而不是我传入的那个?
wcf - Ninject 3、WCF服务和参数化构造函数
我有一个托管在 IIS 中的 WCF 服务。该解决方案由 2 个项目组成:服务和数据。服务依赖于数据,如下所示:
我一直在尝试反转依赖关系,如下所示:
使用 WCF 是一件非常头疼的事情,因为 WCF 服务构造函数必须是无参数的(默认情况下)。
我听说可以使用 Ninject 及其 WCF 扩展来注入依赖项,因此我尝试将其集成到我的解决方案中,但我仍然不清楚哪个项目应该是相关文件和引用?我所做的是:
- 使用 NuGet 下载 Ninject
- 将 Ninject 添加到我的数据和服务项目中(在服务项目的 App_Start 文件夹中创建了 NinjectWebCommon 文件
- 在我的服务项目中创建一个 IDataProxy 接口
- 在我的数据项目中实现接口
- 将 IDataProxy 参数添加到 WCF 服务构造函数
- 在 .svc 文件标记中添加了出厂配置
到目前为止,我很确定我做对了。现在摇摇欲坠的部分:
我使用以下代码在我的数据项目中创建了一个 DataInjectionModule :
/li>我终于尝试在 NinjectWebCommon 文件(当然是两个项目)中注册服务,如下所示:
/li>
当我尝试启动我的服务时,我仍然得到这个:
提供的服务类型无法作为服务加载,因为它没有默认(无参数)构造函数。要解决此问题,请将默认构造函数添加到类型,或将类型的实例传递给主机。
我有一种感觉,问题在于我没有在内核中绑定我的 DataInjectionModule,但是如果我尝试这样做,我必须添加从 Service 到 Data 的依赖关系,这是我试图避免的。
一般专家的建议将不胜感激。谢谢。
.net - I can't get the callscope of my session to work
I'm having trouble scoping my IDocumentSession dependency with Ninject.
Every time my bus executes a command, I want a new IDocumentSession. Commandhandlers that are created by the factory should have that same instance of IDocumentSession injected. I thought putting the bus in a CallScope would work, but I think the AsFactory breaks the CallScope? How would I get this done?
I also tried with context preservation but this makes no difference.
c# - WCF / Ninject / 默认(无参数)构造函数
我正在尝试使用 WCF Ninject 扩展将 Ninject 添加到 WCF 服务。
我收到错误:
提供的服务类型无法作为服务加载,因为它没有默认(无参数)构造函数。要解决此问题,请将默认构造函数添加到类型,或将类型的实例传递给主机。
该服务具有 Ninject 服务主机工厂:
global.asax 文件继承自 NinjectHttpApplication 并且 CreateKernel 返回一个带有 NinjectModule 的新内核:
忍者模块:
带有构造函数注入的服务:
具有属性注入的服务:
如果我使用构造函数注入,我会得到帖子顶部提到的错误。如果我尝试使用属性注入,则 _ScheduleBusiness 始终为空。
我错过了什么?
unit-testing - 使用 MockingKernel 对抽象类进行部分模拟?
我有一个带有依赖项的抽象类,我想对其进行单元测试:
我想使用 NInject 的MockingKernel测试这个类,所以我鼓起了以下内容:
但我遇到了问题。它正在寻找一个无参数的构造函数来创建部分 BaseClass 模拟,而不是传入模拟的 IDependency。
查看源代码,MockingKernel 似乎永远不会在创建时将参数传递给模拟。
有没有办法用 MockingKernel 创建一个部分模拟?
c# - 为什么 Ninject 不使用 InCallScope 释放已处置的对象?
我正在尝试在 WinForms 应用程序中使用 Ninject(版本 3.0.1),我有几个(当前)自绑定服务类,我使用 Ninject 构建它们。一些服务类需要其他服务类(子服务)。这些服务类中的大多数都需要一个存储库来与数据库交互,因为我有一个抽象的 IRepository 接口。我需要为服务类中的整个服务层次结构拥有相同的存储库,因此我InCallScope()
在绑定 IRepository 时使用范围。目前我使用 XPO 作为 ORM 工具,所以我有一个 XpoRepository 实现,我绑定到它。请参阅我关于此场景的其他问题。
我的绑定看起来像这样:
我没有ToSelf()
为每个服务类提供显式绑定,因此我假设当我从 Ninject 获取它们时,它们应该具有瞬态范围,我将其解释为我必须手动处置它们。
假设我有一个 Services1 和一个 Services2 服务类,它们都有一个 IRepository 类型的构造函数参数。现在假设 Services1 想使用 Services2 的一些方法,所以我向 Services1 添加了另一个构造函数参数,类型为 Services2。如果没有 Ninject,我会这样做:
我在后台线程中使用其中一项服务(使用 TPL),在这样的循环中:
在使用 Ninject 之前我有相同的结构,所以我(我认为)正确地实现了对每个对象的处理,包括正确位置的存储库。但是,我注意到,由于我为此使用了 Ninject,因此我的应用程序中存在很大的内存泄漏,并且它每 2-3 小时就会因 OutOfMemoryException 而崩溃。我在循环中放置了一个断点,并注意到 Ninject 缓存有数千个条目,其中充满了已处置的 XpoRepository 对象。我猜它们是由我处理的,但我不确定是谁调用了 dispose 方法。
为什么 Ninject 持有这些已处置的对象?我希望当我在 using 块的末尾处置主要服务时(这是 IRepository 对象的范围,由于 InCallScope()),其范围内的每个对象都应该由 Ninject 处置和释放。
编辑:在任何评论或回答为什么这种模式不好之前,我知道它可能会更好。我知道我可以提取服务接口以实际使用 DI 并提高可测试性,我也知道我可能应该使用 aFunc<IRepository>
作为构造函数参数并注入其中,就像每个服务都可以有自己的责任来处理存储库。只是我目前没有时间进行此类重构。
wcf - WCF 服务中的 NinjectServiceHost 不调用 Dispose()
我一直在尝试在使用 Ninject 的 NinjectServiceHost 时调用 IDisposable WCF 服务上的 Dispose 方法,但没有任何运气。然后我下载了 Ninject.extensions.WCF 示例代码并尝试调用 IDisposable TimeService 的 Dispose() 方法,但它也没有被调用。
该服务已正确实例化,只是没有调用 Dispose()。
这是一个错误还是我自己和示例代码丢失的东西?
我创建了一个精简的服务和测试主机来重现该问题。代码如下。
我正在使用 Ninject 3.0.1.10、Ninject.extensions.WCF 3.0.0.5、.net 4.5
ServiceModule.cs 代码(用于设置绑定)
控制台测试程序来启动服务。
服务实施
c# - 仅解决列表中的一项> 使用 Ninject
这是我的场景:
问题:
这里的动物列表被懒惰地注入到 Foo 类中。
我想做类似 Line * with 的事情Ninject
。您可能知道问题是在解决类之前,GetType()
返回Null
. 那么,如何在需要时仅解决列表中的一项?
可以Ninject
做这样的事情还是我必须改变我的 DI 容器?