Unity: внедрение конструктора с несколькими конструкторами

Я пытаюсь внедрить EF ObjectContext, используя внедрение конструктора Unity. Моя попытка зарегистрировать тип в загрузчике следующим образом:

protected override void ConfigureContainer()
{
    base.ConfigureContainer();
    Container.RegisterType<ObjectContext, MyObjectContext>(new InjectionConstructor());
}

EF создает несколько конструкторов, которые выглядят так:

public MyObjectContext() : base("name=MyObjectContext", "MyObjectContext")
public MyObjectContext(string connectionString) : base(connectionString, "MyObjectContext")
public MyObjectContext(EntityConnection connection) : base(connection, "MyObjectContext")

При отладке моего кода Unity генерирует исключение ResolutionFailedException, сообщающее мне: «Тип MyObjectContext имеет несколько конструкторов длины 1. Невозможно устранить неоднозначность». во время разрешения нового класса, имеющего следующий конструктор.

public MainViewModel(UnityContainer container, MyObjectContext entities)

Насколько я знаю, использование RegisterType с new InjectionConstructor() в качестве аргумента гарантирует, что вызывается конструктор без параметров по умолчанию (это то, что я хочу). Почему Unity не может разрешить тип, как ожидалось? Я ничего не пропустил?

Наилучшие пожелания

Джей


person Jay    schedule 10.07.2011    source источник


Ответы (1)


Ваша регистрация выглядит правильно. Вы уверены, что вызывается регистрационный код? Попробуйте поставить на нем точку останова.

(Не по теме: почему вы передаете свой контейнер своей модели представления?)

person Phil Sandler    schedule 11.07.2011
comment
Я отмечаю это как ответ, потому что это привело меня к решению. Кажется, у Unity были некоторые проблемы с разрешением типа, потому что я зарегистрировал его не в том месте. Я передал контейнер, потому что думал, что он мне понадобится для разрешения зарегистрированных экземпляров/типов в проектах (оболочка, модули, инфраструктура и т. д.), но это не кажется правильным/работающим способом. - person Jay; 15.07.2011