0

我有以下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

4

1 回答 1

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);  
    }
});

我会让这个开放一段时间,看看是否有人有更好的方法来做到这一点。

于 2011-04-01T08:47:32.323 回答