2015-04-06 3 views
3

Я новичок в Ninject и изо всех сил стараюсь пройти этот тест. (Этот тест прошел с Autofac, но поведение в Ninject отличается от другого).Разрешение неназванного Ninject multi-binding

[Test] 
public void RegisterInstance_unnamed_should_return_unnamed_when_multiple_registrations() 
{ 
    var sut = new StandardKernel(); 
    var instance1 = new Dependency3(); 
    var instance2 = new Dependency3(); 

    sut.Bind<Dependency3>().ToConstant(instance1).Named("instance1"); 
    sut.Bind<Dependency3>().ToConstant(instance2); 

    sut.Get<Dependency3>("instance1").ShouldBeSameAs(instance1); 
    sut.Get<Dependency3>().ShouldBeSameAs(instance2); 
} 

Когда я звоню в последнюю строку я получаю это сообщение об исключении:

Ninject.ActivationException: Ошибка активирующей Dependency3

Нет соответствующие привязки не доступны, и тип не является самим-Привязываемым ,

Активация пути: 1) Запрос Dependency3

Как устранить привязку, которая не называется, когда есть несколько привязок?

Благодаря

+0

На самом деле я верю исключение, которое вы получаете состояния ** Доступно несколько совпадающих привязок **. Если это так, отредактируйте вопрос соответствующим образом. – BatteryBackupUnit

+0

Спасибо, но сообщение об ошибке было «Нет соответствующих привязок». Я уточнил вопрос с точной формулировкой сообщения об исключении. –

+0

Это сообщение может ответить на ваш вопрос: http://stackoverflow.com/questions/5997483/ninject-default-contextual-binding – CarllDev

ответ

3

Если вы хотите, чтобы лечить не-поименованые как «по умолчанию», вы должны добавить .BindingConfiguration.IsImplicit = true к названным привязок. Например:

Bind<Dependency3>().ToConstant(instance1) 
    .Named("instance1") 
    .BindingConfiguration.IsImplicit = true; 

В противном случае именованное связывание будет удовлетворять запросу без имени.

+0

Спасибо за ответ. К сожалению, добавление .BindingConfiguration.IsImplicit = true не имело эффекта, и я все еще получаю то же исключение. –

+0

Hi BatteryBackupUnit. Я принял ваш ответ, потому что, когда я создаю совершенно новый проект, нацелив на .Net 4.5.1 и используя Ninject 3.2.2.0, добавление BindingConfiguration.IsImplicit = true делает пробный проход. Я также получаю сообщение об ошибке, которое вы предлагаете: «Более одного соответствия привязок ...» Что же, по-видимому, является непонятным, заключается в том, что в моем существующем тестовом проекте, также нацеленном на .NET Framework 4.5.1 и использовании Ninject 3.2.2.0, это не делает тестовый проход, и я получаю другое сообщение об ошибке: «Нет соответствующих привязок доступны ...» –

+0

Не знаете, почему было бы различие в поведении, поскольку тест кажется совершенно изолированным от всего остального в проекте. –

Смежные вопросы