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 に答える