如何为NinjectModule中调用的方法提供注入

时间:2011-03-31 14:40:19

标签: c#-4.0 ninject ninject-2

我有以下NinjectModule派生类:

class MainModule : NinjectModule 
{
    public override void Load()
    {
        Bind<IMyClass>().To<MyClass>();

        Bind<IMainClass>().To<MainClass>().OnActivation((context,myClass) => 
        { myClass.Add("Something", context.Kernel.Get<IMyClass>());  });
    }
}

我的问题是IKernel没有公开.Get<T>扩展方法。

这样做有什么模式吗?

警告:我不想用Ninject属性来装饰我的类,因为Add特定于MainClass的工作方式我希望所有代码与其创建一起进行在这个模块中。

TIA

1 个答案:

答案 0 :(得分:0)

嗯,看起来愚蠢的疏忽到底。扩展方法位于Ninject命名空间中,使用模块只需要using Ninject.Modules;

添加using Ninject;表示可能存在以下情况:

Bind<IMainClass>().To<MainClass>()
.OnActivation((context,myClass) => 
{ 
    foreach(var n in context.Kernel.GetAll<IMyClass>())
    {
        myClass.Add("Something", n);  
    }
});

我会稍微公开一下,看看是否有人有更好的方法来做这件事。