2

我收到一个 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>();
4

1 回答 1

3

来自ChildKernel 自述文件

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>();
于 2012-03-18T08:03:25.157 回答