Unity умеет резолвить зависимости-массивы. Для такой зависимости контейнер возвращает объекты всех подходящих типов. Даже при разрешении зависимостей с указанием имени будут возвращены все подходящие типы.
Также этого Unity поддерживает разрешение обобщенных массивов.
Пример
Интерфейс и классы логгеров
public interface ILogger { void Write(string message); } public class TraceLogger: ILogger { public void Write(string message) { Trace.Write(message); } } public class ConsoleLogger: ILogger { public void Write(string message) { Console.WriteLine(message); } }
Сервис, принимающий обобщенный массив
public class SomeService2<T> { public SomeService2(T[] array) { } }
Код, получающий нужный экземпляр
var container = new UnityContainer(); container .RegisterType<ILogger, ConsoleLogger>("ConsoleLogger") .RegisterType<ILogger, TraceLogger>("TraceLogger"); var service = container.Resolve<SomeService2<ILogger>>();
При вызове такого кода в конструктор SomeService2 будет передан массив из двух логгеров.