Если вы хотите, чтобы все конкретные экземпляры типа были введены, вы ДОЛЖНЫ объявить параметр как массив. Вы можете решить вашу проблему, изменив конструктор на:
public WriterMerger(IWriter[] writers)
Имейте в виду, что инструменты очистки кода, такие как ReSharper, могут выделить массив в вашем конструкторе и предложить заменить его на IEnumerable, если это все, что требуется для вашего WriterMerger. Однако эти инструменты не знают о требовании StructureMap использовать массив, поэтому вы должны его игнорировать.
Вам также может быть интересно узнать, что вы можете автоматически зарегистрировать все свои IWriters вместо явного перечисления их. Просто измените конфигурацию вашего контейнера на:
StructureMap.ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.AddAllTypesOf<IWriter>();
});
});
Существует несколько различных вариантов сканирования, которые позволяют сканировать различные сборки, исключать определенные типы и т. Д.