Я использую контейнер Unity IoC для разрешения своих объектов. Однако я столкнулся с проблемой. Когда у меня есть более одного конструктора - как Unity узнает, какой из них использовать? Кажется, использовать один с параметрами, когда у меня есть один с и без. Могу ли я явно сказать, какой конструктор использовать?
В частности, у меня был случай, похожий на следующий класс Person с двумя конструкторами. В этом случае я хочу, чтобы контейнер IoC использовал конструктор по умолчанию - без параметров - но он выбирает тот, у которого есть параметры.
public class SomeValueObject
{
public SomeValueObject(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Person
{
private string _name;
public Person()
{
_name = string.Empty;
}
public Person(SomeValueObject obj)
{
_name = obj.Name;
}
}
Это, очевидно, дает сбой, так как он не может создать SomeValueObject - не зная, что вставить в его строковый параметр. Ошибка, которую он дает:
Не удалось разрешить зависимость, type = "MyApp.Person", name = "". Сообщение об исключении: текущая операция сборки (ключ сборки [Build Key [MyApp.Person, null])) завершилась неудачно: не удалось разрешить параметр obj при попытке вызвать конструктор MyApp.Person (MyApp.SomeValueObject obj) (Тип стратегии BuildPlanStrategy, индекс 3)
Контейнерная регистрация:
Container.RegisterType<Person, Person>(new Microsoft.Practices.Unity.ContainerControlledLifetimeManager());
И разрешение:
var person = Container.Resolve<Person>();