Ответ 1
Unity по умолчанию выбирает конструктор с наибольшим количеством параметров. Вы должны сказать Unity явно использовать другое.
Один из способов сделать это - с атрибутом [InjectionConstructor] следующим образом:
using Microsoft.Practices.Unity;
public class Repo
{
[InjectionConstructor]
public Repo() : this(ConfigurationManager.AppSettings["identity"], ConfigurationManager.AppSettings["password"])
{
}
public Repo(string identity,string password)
{
//Initialize properties.
}
}
Второй способ сделать это, если вы против загромождения классов/методов с атрибутами, заключается в том, чтобы указать, какой конструктор использовать при настройке вашего контейнера, используя InjectionConstructor:
IUnityContainer container = new UnityContainer();
container.RegisterType<Repo>(new InjectionConstructor());
В документации :
Как единство разрешает конструкторы и параметры целей
Если целевой класс содержит более одного конструктора, Unity будет использовать тот, который имеет атрибут InjectionConstructor. Если здесь является более чем одним конструктором, и ни один из них не имеет Атрибут InjectionConstructor, Unity будет использовать конструктор с большинство параметров. Если существует более одного такого конструктора (более чем один из "самых длинных" с одинаковым количеством параметров), Unity приведет к возникновению исключения.