0

Я пытаюсь внедрить объект ObjectContext EF, используя инъекцию конструктора Unity. Мой attemp должен зарегистрировать тип в bootsprapper, как это:Единство: инъекция конструктора с несколькими конструкторами

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

EF создает Mutiple конструкторами, которые выглядят как эти

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 не может разрешить тип, как ожидалось? Мне что-то не хватает?

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

Jay

ответ

3

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

(Off тему: почему вы отдаете ваш контейнер к вашему ViewModel?)

+0

Я отмечаю это как ответ, потому что это привело меня к решению. Кажется, что у Единства были некоторые проблемы, разрешающие этот тип, потому что я зарегистрировал его не в том месте. Я передал контейнер, потому что я думал, что мне понадобится его для разрешения зарегистрированных экземпляров/типов для проектов (оболочка, модули, инфраструктура и т. Д.), Но это, похоже, не является правильным/рабочим способом. – Jay