时间:2010-11-03 20:13:02

标签: ninject

我有一个类需要在它的类中使用一个IRepository。

理想情况下,我想避免将此依赖关系解析为类的构造函数,因此我在Ninject中找到了方法级注入,并想知道它是如何工作的?

我了解如何设置它。我很困惑的是如何称呼它?

示例:

class SomeClassThatUsesRepository
{
    [Inject]
    public void QueryForSomeStuff(IRepository repository)
    {
        //do some stuff
    }
}

我的问题是如何在不指定IRepository的情况下调用此方法?

var someClass = Kernel.Resolve<SomeClassThatUsesRepository>();
如果我使用构造函数,

会工作,但我想调用一个方法。

如何使用Ninject方法注入调用方法?

2 个答案:

答案 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。