Как дано в другом вопросе 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>()
});
Я не могу воспроизвести проблему, которую вы описываете. См. [Здесь] (https://dotnetfiddle.net/5uxeQq). Я вижу два разрешенных экземпляра, один из каждого зарегистрированного типа. – TylerOhlsen
То, что я сделал, было создано черным консольным приложением и попробовало, и оно сработало, как вы упомянули. Это побудило меня больше исследовать базу кода и найти неправильного яслей. –