你如何使用Ninject的方法注入?

Jos*_*eph 6 ninject

我有一个类需要在它的类中使用IRepository作为一个方法.

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

我理解如何设置它.我很困惑的是如何称呼它?

例:

class SomeClassThatUsesRepository
{
    [Inject]
    public void QueryForSomeStuff(IRepository repository)
    {
        //do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

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

var someClass = Kernel.Resolve<SomeClassThatUsesRepository>();
Run Code Online (Sandbox Code Playgroud)

如果我使用构造函数会工作,但我想调用一个方法.

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

NOt*_*Dev 13

我担心方法注入不会以这种方式工作 - 它只是在构造过程中将依赖项注入对象的方法之一(您可以通过构造函数参数,通过属性,字段或方法注入依赖项).如果您的类通过Java样式的setter方法获取其依赖项,则方法注入很有用

public void SetRepository(IRepository repository) { ... }
Run Code Online (Sandbox Code Playgroud)

如果用[Inject]属性标记,则不需要直接调用此方法,在初始化期间由Ninject调用它以将IRepository对象传递到已解析的对象中.

所以我相信你的QueryForSomeStuff方法是在你恢复你的时候被调用的SomeClassThatUsesRepository.