Если вы хотите добавить массив, есть метод для этого в свободном интерфейсе ...
ForRequestedType<IBootStrapperTask>().TheDefault.Is.OfConcreteType<StartTasks>()
.TheArrayOf<ITask>().Contains(
y => {
y.OfConcreteType<Task1>();
y.OfConcreteType<Task2>();
y.OfConcreteType<Task3>();
});
Если вы хотите пойти по пути принятия IEnumerable<T>
в вашем конструкторе, насколько я вижу, все становится немного сложнее. Вы можете указать и построить аргумент конструктора следующим образом: -
ForRequestedType<IBootStrapperTask>().TheDefault.Is.OfConcreteType<StartTasks>()
.CtorDependency<IEnumerable<ITask>>().Is(i => {
i.Is.ConstructedBy(c => {
return new List<ITask> {
c.GetInstance<Task1>(),
c.GetInstance<Task2>(),
c.GetInstance<Task3>()
};
});
});
Если вам нужны все зарегистрированные типы, вы можете создать собственный IBuildInterceptor, который обращается ко всем зарегистрированным типам через метод CreateInstanceArray в BuildSession, но у меня возникает ощущение, что я могу пойти по неправильному пути.
Я бы хотел, чтобы меня поправили, что это намного проще :).