我有一个类需要在它的类中使用一个IRepository。
理想情况下,我想避免将此依赖关系解析为类的构造函数,因此我在Ninject中找到了方法级注入,并想知道它是如何工作的?
我了解如何设置它。我很困惑的是如何称呼它?
示例:
class SomeClassThatUsesRepository
{
[Inject]
public void QueryForSomeStuff(IRepository repository)
{
//do some stuff
}
}
我的问题是如何在不指定IRepository的情况下调用此方法?
var someClass = Kernel.Resolve<SomeClassThatUsesRepository>();
如果我使用构造函数,会工作,但我想调用一个方法。
如何使用Ninject方法注入调用方法?
答案 0 :(得分:13)
我担心方法注入不会以这种方式工作 - 它只是在构造过程中将依赖项注入对象的方法之一(您可以通过构造函数参数,通过属性,字段或方法注入依赖项)。如果您的类通过Java样式的setter方法(如
)获取其依赖项,则方法注入很有用public void SetRepository(IRepository repository) { ... }
如果它标有[Inject]
属性,则不需要直接调用此方法,在初始化期间由Ninject调用它以将IRepository
对象传递给已解析的对象。
因此,我相信当您恢复QueryForSomeStuff
时,系统会调用SomeClassThatUsesRepository
方法。
答案 1 :(得分:0)
确认方法注射不能按预期工作。有一个自定义MVC属性类,并希望在其中使用注入的对象。没有通过它 进入构造函数并添加方法
[Ninject.Inject]
public void ResolveDI(ISettingStore store)
{
ConfigHelper = store;
}
调用属性的OnActionExecuting时,从未调用此方法,并且ConfigHelper为null。