2

IEventBrokerのアクティブ化中にエラーが発生したというActivationExceptionが発生します。MyDataSourceは、IEventBrokerにパラメーターがあります。子カーネルを使用しなくても問題ありません。何が起こっている?

        var kernel = new StandardKernel();
        var childKernel = new ChildKernel(kernel);
        var eventBroker = new EventBroker();
        childKernel.Bind<IEventBroker>().ToConstant(eventBroker);         
        var myDS = childKernel.Get<MyDataSource>();
4

1 に答える 1

3

ChildKernel readmeから:

明示的でない場合でもクラスが自身にバインドされるというNinjectのデフォルトの動作はまだ存在します。ただし、この場合、これは最上位の親によって行われます。これは、このクラスが子カーネルに依存関係を定義できないことを意味します。ninjectによって解決されるすべてのオブジェクトをバインドし、このデフォルトの動作を使用しないことを強くお勧めします。

MyDataSourceしたがって、それを機能させるには、明示的に自分自身にバインドする必要があります。

var kernel = new StandardKernel();
var childKernel = new ChildKernel(kernel);
var eventBroker = new EventBroker();
childKernel.Bind<IEventBroker>().ToConstant(eventBroker);
childKernel.Bind<MyDataSource>().ToSelf();
var myDS = childKernel.Get<MyDataSource>();
于 2012-03-18T08:03:25.157 に答える