public interface IFoo {}
public interface IBar {}
public class Foo1 : IFoo {}
public class FooOne : IFoo {}
public class FooTwo : IFoo {}
public class BarOne : IBar
{
public BarOne(IFoo foo) {}
}
public class BarTwo : IBar
{
public BarTwo(IFoo foo) {}
}
class Program
{
static void Main(string[] args)
{
UnityContainer container = new UnityContainer();
container.RegisterType<IFoo, FooOne>("One")
.RegisterType<IFoo, FooTwo>("Two")
.RegisterType<IBar, BarOne>("One")
.RegisterType<IFoo, BarTwo>("Two");
string fooType = "One";
string barType = "Two";
IFoo myFoo = container.Resolve<IFoo>(fooType);
IBar myBar = container.Resolve<IBar>(barType);
}
}
Пример кода выше выдает эту ошибку:
Ошибка разрешения зависимости, type = "ConsoleApplication5.IBar", name = "Two". Исключение произошло во время: при разрешении. Исключение: InvalidOperationException — текущий тип ConsoleApplication5.IFoo является интерфейсом и не может быть создан. Вам не хватает сопоставления типов? ----------------------------------------------- В это время исключения, контейнер был:
Разрешение ConsoleApplication5.BarTwo,Two (сопоставлено с ConsoleApplication5.IBar, Two) Разрешение параметра "foo" конструктора ConsoleApplication5.BarTwo(ConsoleApplication5.IFoo foo) Разрешение ConsoleApplication5.IFoo,(none)
В моем решении используется DependencyResolver
, который изменяет эту строку:
IBar myBar = container.Resolve<IBar>(barType);
к этому:
IBar myBar = container.Resolve<IBar>(barType, new DependencyOverride<IFoo>(myFoo));
Я хочу решить эту проблему, используя метод RegisterType
. Возможно ли это или есть другое решение?
Спасибо.