Unity поймет, что зависимости T[]
(массив) - это список вещей (но не IEnumerable<T>
и не List<T>
).Когда вы изменяете конструктор ClassToResolve
на CollectionItem[]
вместо List<CollectionItem>
, вы можете настроить CollectionItem
типы следующим образом:
container.RegisterType<CollectionItem, CollectionItemA>("a");
container.RegisterType<CollectionItem, CollectionItemB>("b");
container.RegisterType<CollectionItem, CollectionItemC>("c");
container.RegisterType<CollectionItem, CollectionItemD>("d");
Хитрость в том, чтобы назвать все регистрации,Регистрация по умолчанию (без имени) никогда не будет частью зависимости последовательности в Unity.
Теперь вы можете разрешить ClassToResolve
без необходимости его регистрации:
container.Resolve<ClassToResolve>();
Если вы предпочитаете вводList<CollectionItem>
Вы можете добавить следующую регистрацию:
container.RegisterType<IList<CollectionItem>, CollectionItem[]>();
А для IEnumerable<CollectionItem>
вы можете добавить следующую строку:
container
.RegisterType<IEnumerable<CollectionItem>, CollectionItem[]>();