Unity:如何将派生类型解析为IEnumerable?

时间:2012-02-22 17:54:21

标签: c# unity-container ioc-container

我有基类和几个派生类。如何通过Unity将这些派生类型解析为IEnumerable集合?我已经尝试过如同

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

但它引发了invalidCastException

2 个答案:

答案 0 :(得分:2)

您应该只使用ResolveAll的泛型重载。

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

或者,使用Enumerable.Cast

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

答案 1 :(得分:1)

我没有使用Unity,但假设您使用的是.NET 3.5或更高版本,您可以尝试使用LINQ:

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

(您可能需要致电ToList()将其具体化为List<BaseClass>。)