代码之家  ›  专栏  ›  技术社区  ›  Joseph

您如何使用Ninject的方法注射?

  •  5
  • Joseph  · 技术社区  · 15 年前

    我有一个类,它的类中有一个方法需要使用IRepository。

    理想情况下,我希望避免将这个依赖项解析到类的构造函数中,所以我在Ninject中找到了方法级注入,并想知道这是如何工作的?

    例子:

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

    我的问题是如何调用此方法而不指定IRepository?

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

    如果我使用构造器就可以了,但是我想调用一个方法。

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

    2 回复  |  直到 15 年前
        1
  •  13
  •   NOtherDev    15 年前

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

    public void SetRepository(IRepository repository) { ... }
    

    如果上面有 [Inject] 属性,您不需要直接调用此方法,它将由Ninject在初始化期间调用以传递 IRepository 对象转换为解析对象。

    所以我相信你 QueryForSomeStuff SomeClassThatUsesRepository .

        2
  •  0
  •   Valery Gavrilov    9 年前

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

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

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