Иерархия разрешения объектов контейнера Unity - PullRequest
1 голос
/ 08 июня 2011

Мой контейнер настроен следующим образом:

container = new UnityContainer()
            .RegisterType<IA, A>()
            .RegisterType<IB, B>()
            .RegisterType<IC, C>(new InjectionConstructor(strA));

Мне нужно зарегистрировать еще один экземпляр C, например:

container.RegisterType<IC, C>(new InjectionConstructor(strB));

обратите внимание на разницу между strA и strB.

И A, и B нуждаются в C. Но я хочу, чтобы A использовал первые C и B, чтобы использовать второй C.

Есть ли в Unity правильный путь для достижения этого?

Спасибо

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Вы захотите использовать именованный тип регистрации .

var container = new UnityContainer()
  .RegisterType<IC, C>("ForA", new InjectionConstructor(strA))
  .RegisterType<IC, C>("ForB", new InjectionConstructor(strB))

  .RegisterType<IA, A>(new InjectionConstructor(container.Resolve<IC>("ForA")))
  .RegisterType<IB, B>(new InjectionConstructor(container.Resolve<IC>("ForB")));
0 голосов
/ 08 июня 2011

В прошлом я достигал этого, украшая / расширив общие интерфейсы, чтобы идентифицировать их для сопоставлений.

// new interface just for A
public interface ICforA : IC { }

// new interface just for B
public interface ICforB : IC { }

container = new UnityContainer()
           .RegisterType<IA, A>()
           .RegisterType<IB, B>()
           .RegisterType<ICforA, C>(new InjectionConstructor(strA));
           .RegisterType<ICforB, C>(new InjectionConstructor(strB));

Отказ от ответственности: код, написанный из памяти, а не Visual Studio.

...