【问题标题】:How do you use method injection with Ninject?你如何在 Ninject 中使用方法注入?
【发布时间】:2010-11-03 20:13:01
【问题描述】:

我有一个类需要为其类中的一种方法使用 IRepository。

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

我知道如何设置它。我很困惑的是怎么称呼它?

例子:

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

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

var someClass = Kernel.Resolve<SomeClassThatUsesRepository>();

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

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

【问题讨论】:

    标签: ninject


    【解决方案1】:

    恐怕方法注入不能以这种方式工作 - 它只是在对象构造期间将依赖项注入对象的方法之一(您可以通过构造函数参数、属性、字段或方法注入依赖项)。如果您的类通过 Java 样式的 setter 方法(如

    )获取其依赖项,则方法注入很有用
    public void SetRepository(IRepository repository) { ... }
    

    如果标有[Inject]属性,则不需要直接调用该方法,由Ninject在初始化时调用,将IRepository对象传递给你解析的对象。

    所以我相信当你解决你的SomeClassThatUsesRepository 时,你的QueryForSomeStuff 方法会被调用。

    【讨论】:

    • +1 很好的解释。我只想提到它模仿了两个阶段的构造-即,好像该方法被称为 Initialize()
    【解决方案2】:

    确认方法注入没有按预期工作。获得了一个自定义 MVC 属性类,并希望在其中使用注入的对象。没有通过 进入构造函数并添加方法

    [Ninject.Inject]
    public void ResolveDI(ISettingStore store)
    {
        ConfigHelper = store;
    }
    

    在调用属性的 OnActionExecuting 时,从未调用过此方法,并且 ConfigHelper 为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多