Unity: как преобразовать производные типы в IEnumerable? - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть базовый класс и несколько производных классов.как я могу разрешить эти производные типы с помощью Unity в коллекцию IEnumerable?я пробовал что-то вроде

var myObjectList = (IEnumerable<BaseClass>) UnityContainerFactory.UnityContainer.ResolveAll(typeof(BaseClass));

но возникает недопустимая исключительная ситуация

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Вы должны просто использовать общую перегрузку ResolveAll.

var myObjectList = UnityContainerFactory.UnityContainer
                                        .ResolveAll<BaseClass>();

В качестве альтернативы используйте Enumerable.Cast:

var myObjectList = UnityContainerFactory.UnityContainer
                                        .ResolveAll(typeof(BaseClass))
                                        .Cast<BaseClass>();
1 голос
/ 22 февраля 2012

Я не использовал Unity, но, если вы используете .NET 3.5 или выше, вы можете попробовать использовать LINQ:

var myObjectList = UnityContainerFactory.UnityContainer
                                        .ResolveAll(typeof(BaseClass))
                                        .Cast<BaseClass>();

(Вы можете позвонить ToList(), чтобы материализовать его в List<BaseClass>.)

...