У меня есть класс, который принимает параметр конструктора IEnumerable
, который я хочу разрешить с помощью Unity и внедрить массив объектов. Эти простые классы иллюстрируют проблему.Как настроить Unity для вставки массива для IEnumerable
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, чтобы заставить это работать?
возможно дубликат [постановляющей IEnumerable с Unity] (http://stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity) –
Я не думаю, что это дубликат, потому что речь идет о программном регистрации тогда как я использую конфигурационный файл. – batwad