2012-03-18 4 views
2

IEventBrokerをアクティブにする際にエラーが発生したというActivationExceptionが表示されます。 MyDataSourceはIEventBrokerを受け取り、パラメータを持ちます。子カーネルを使用しない場合、問題はありません。何が起こっている? ChildKernel readmeからChildKernelでNinject ActivationExceptionが発生する

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

答えて

2

ない明示がまだ存在する場合は、クラスがその人自身にバインドされていることを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>(); 
関連する問題