У меня есть класс, который принимает параметр конструктора IEnumerable
, который я хочу разрешить с помощью Unity и внедрить массив объектов. Эти простые классы иллюстрируют проблему.
public interface IThing
{
int Value { get; }
}
public class SimpleThing : IThing
{
public SimpleThing()
{
this.Value = 1;
}
public int Value { get; private set; }
}
public class CompositeThing : IThing
{
public CompositeThing(IEnumerable<IThing> otherThings)
{
this.Value = otherThings.Count();
}
public int Value { get; private set; }
}
Скажем, я хочу ввести четыре SimpleThing
в CompositeThing
. Я пробовал несколько вариантов следующей конфигурации Unity.
<alias alias="IThing" type="TestConsoleApplication.IThing, TestConsoleApplication" />
<alias alias="SimpleThing" type="TestConsoleApplication.SimpleThing, TestConsoleApplication" />
<alias alias="CompositeThing" type="TestConsoleApplication.CompositeThing, TestConsoleApplication" />
<container>
<register type="IThing" mapTo="SimpleThing" name="SimpleThing" />
<register type="IThing" mapTo="CompositeThing" name="CompositeThing">
<constructor>
<param name="otherThings">
<array>
<dependency type="SimpleThing"/>
<dependency type="SimpleThing"/>
<dependency type="SimpleThing"/>
<dependency type="SimpleThing"/>
</array>
</param>
</constructor>
</register>
</container>
Однако я получаю сообщение об ошибке Конфигурация настроена для внедрения массива, но тип IEnumerable`1 не является типом массива. Если я изменяю параметр конструктора на IThing[]
, он работает, но я этого не делаю. не хочу этого делать. Что мне нужно сделать с моей конфигурацией Unity, чтобы это заработало?