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 будет передан массив из двух логгеров.

Теги : Unity, .NET, IoC-контейнер