Если бы в конструкторе был массив IWidgets, то SM добавлял бы все IWidget при создании новой машины, так как я считаю, что это поведение по умолчанию.
Для вставки определенного массива:
For<IMachine>()
.TheDefault.Is.OfConcreteType<Machine>()
.TheArrayOf<IWidget>().Contains(
x => {
x.OfConcreteType<SquareWidget>();
x.OfConcreteType<YellowWidget>();
x.OfConcreteType<BadWidget>();
});
или, для IEnumerable:
For<IMachine>()
.TheDefault.Is.OfConcreteType<Machine>()
.CtorDependency<IEnumerable<IMachine>>().Is(i => {
i.Is.ConstructedBy(c => {
return new List<ITask> {
x.OfConcreteType<SquareWidget>();
x.OfConcreteType<YellowWidget>();
x.OfConcreteType<BadWidget>();
};
});
});
Вероятно, есть способ сделать это последним без необходимости быть конкретным, но мой разум колеблется. :)
О, и инъекционная магия тоже была бы возможна.