I have two example classes
class ClassToResolve
{
private List<CollectionItem> _coll;
public ClassToResolve(List<CollectionItem> coll)
{
_coll = coll;
}
}
class CollectionItem
{
//...
}
and I need to resolve ClassToResolve
var classToResolve = new ClassToResolve(
new List<CollectionItem>()
{
new CollectionItem(),
new CollectionItem(),
new CollectionItem()
}
);
Now I resolve it in a way
var classToResolve = new ClassToResolve(
new List<CollectionItem>()
{
unity.Resolve<CollectionItem>(),
unity.Resolve<CollectionItem>(),
unity.Resolve<CollectionItem>()
}
);
Is there a way to resolve ClassToResolve with Unity using dynamic registration?
Unity will understand that
T[](array) dependencies are a list of things (but notIEnumerable<T>, norList<T>). When you change the constructor ofClassToResolveto take anCollectionItem[]instead of aList<CollectionItem>you can configure yourCollectionItemtypes as follows:The trick here is to name all the registrations. A default (nameless) registration will never be part of a sequence dependency in Unity.
Now you can resolve
ClassToResolvewithout the need to register it:If you rather inject
List<CollectionItem>you can add the following registration:And for
IEnumerable<CollectionItem>you can add the following line: