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);
}
}
Пример кода выше выдает эту ошибку:Как разрешить зависимость, используя именованный тип регистрации в Unity?
Постановление зависимости не удалось, тип = , название "ConsoleApplication5.IBar" = "Two". Исключение произошло во время: при разрешении. Исключение: InvalidOperationException. Текущий тип , ConsoleApplication5.IFoo, является интерфейсом и не может быть сконфигурирован как . Вам не хватает картографирования типов? ----------------------------------------------- На время, за исключением, контейнер был:
Разрешение ConsoleApplication5.BarTwo, Два (отображенный из ConsoleApplication5.IBar, два) Разрешение параметра "Foo" из конструктора ConsoleApplication5.BarTwo (ConsoleApplication5.IFoo Foo) Решение ConsoleApplication5. IFoo, (нет)
Мое решение использует DependencyResolver
, который изменяет эту строку:
IBar myBar = container.Resolve<IBar>(barType);
к этому:
IBar myBar = container.Resolve<IBar>(barType, new DependencyOverride<IFoo>(myFoo));
Я хочу, чтобы решить эту проблему, используя метод RegisterType
. Возможно ли это или есть другое решение?
Спасибо.
Некоторые детали отсутствуют. Вам необходимо зарегистрировать IMessageType с контейнером где-нибудь в вашем коде. – Tilak
@ Тилак Я редактирую сообщение. Сообщение об ошибке принадлежало исходному коду. Теперь вы можете увидеть сообщение об ошибке упрощенной версии. –