Исключение Ninject ActivationException для ChildKernel - PullRequest
2 голосов
/ 18 марта 2012

Я получаю исключение 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 Ответ

3 голосов
/ 18 марта 2012

Из файла 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>();
...