2009-10-06 2 views
1

У меня, кажется, проблема - довольно неожиданная; поэтому я думаю, что я мог бы сделать что-то глупое/неправильное.Ошибка регистрации/исправления компонента автозаполнения?

зарегистрировать два контейнера область действия услуги, как, например:

builder.Register<IServiceInfo>(c => CreateServiceInfo(c)).As<IServiceInfo>(); 
builder.Register<IServiceInfo>(c => CreateServiceInfoSomeOther(c)).As<IServiceInfo>().Named("someOther"); 

Теперь, когда я пытаюсь решить

container.Resolve<IServiceInfo>() 
and container.Resolve<IServiceInfo>("someOther") 

я получаю тот же экземпляр. Я бы ожидал, что первый вызов вернет первый экземпляр и второй вызов, чтобы вернуть второй экземпляр. Почему так происходит?

Я надеюсь, что здесь есть несколько активных экспертов Autofac, и я буду признателен за любую помощь, чтобы быстро исправить это.

Спасибо, все!

+0

Спасибо за изменения Филипп. –

ответ

2

Когда регистрируются две службы, выигрывает последняя (не имеет значения, что вторая названа, она по-прежнему является регистрацией для этой службы), если вы не попросите экземпляр по имени.

Вы можете использовать «.DefaultOnly()», чтобы изменить свою вторую регистрацию, чтобы первый был фактическим значением по умолчанию. См. wiki page для получения дополнительной информации.

+0

Отлично, это сделал трюк. Благодаря тонну! –

+0

Я хотел прокомментировать, но у меня недостаточно репутации, чтобы сделать это. Этот ответ был очень полезен, тем более, что я не мог найти документацию для старых версий Autofac в любом месте в Интернете! Любой, кто использует это решение, должен отметить, что он прекратит именованную регистрацию работать с IContainer.ResolveOptional (имя). Вместо этого вам придется использовать метод .Resolve (name) и обернуть его в блок try/catch. – oligofren

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