ChildKernel上的Ninject ActivationException

时间:2012-03-18 02:59:43

标签: ninject ninject-extensions

我收到一个ActivationException,说激活IEventBroker时出错。 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>();

1 个答案:

答案 0 :(得分:3)

来自ChildKernel readme

  

Ninject的默认行为,即类绑定到自己的行为   不明确仍然存在。但在这种情况下,这将由   最顶级的父母。这意味着这个班级不能有任何   在子内核上定义的依赖项。我强烈建议你有一个   绑定由ninject解析但不使用的所有对象   这个默认行为。

因此,您需要将MyDataSource显式绑定到self以使其正常工作:

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