2015-12-03 5 views
2

Как дано в другом вопросе Getting unity to resolve multiple instances of the same typeUnity разрешить многократное выполнение одного и того же интерфейса

Я инициализируется единство контейнера следующим образом.

static void Main(string[] args) 
     { 
      var container = new UnityContainer(); 
      container.RegisterType<IFoo, Foo1>("aaa"); 
      container.RegisterType<IFoo, Foo2>("bbb"); 

      // container.Resolve<IEnumerable<IFoo>>(); returns 0 
      // container.ResolveAll<IFoo>(); returns 0 

      Console.WriteLine(foos.Count()); 

      Console.ReadLine(); 

     } 

Когда единство инициализирует следующий класс, он отправляет массив, содержащий два элемента. Но два элемента относятся к одному классу Foo1. Я не хочу дубликатов. Мне нужно внедрить все различные реализации IFoo.

public class Test 
     { 
      IFoo[] _fooSet; 
      public Test(IFoo[] allRegisteredInterfaces) 
      { 
       _fooSet = allRegisteredInterfaces; 
      } 

     } 

Например, раствор при Injecting arrays with Unity не работает, потому что она создает дубликаты в впрыскиваемом массиве.

Как это сделать? Также обратите внимание, что я не хочу регистрировать реализации экземпляров. Я мог бы легко сделать это, зарегистрировав массив каждого экземпляра реализаций IFoo. Например, следующее решение недействительно, поскольку оно регистрирует экземпляры вместо типов.

container.RegisterInstance<IFoo[]>(new IFood[] { 
       container.Resolve<Foo1>(), 
       container.Resolve<Foo2>() 
      }); 
+2

Я не могу воспроизвести проблему, которую вы описываете. См. [Здесь] (https://dotnetfiddle.net/5uxeQq). Я вижу два разрешенных экземпляра, один из каждого зарегистрированного типа. – TylerOhlsen

+0

То, что я сделал, было создано черным консольным приложением и попробовало, и оно сработало, как вы упомянули. Это побудило меня больше исследовать базу кода и найти неправильного яслей. –

ответ

1

Я наконец нашел ответ. Оказалось, что был пользовательский менеджер времени жизни, и он был неправильно закодирован. Сначала я создал черное консольное приложение и попробовал пример кода единства, и он сработал. Это привело к выводу, что исходная кодовая база была неправильной.

Смежные вопросы