1

从下面代码的第二行,我检索了一个类型列表。我想将此作为 IBusinessObject 列表返回。这可能吗?如果是这样,我将如何去做?

public List<IBusinessObject> RetrieveAllBusinessObjects()
{
    var businessObjectType= typeof(IBusinessObject);

    List<Type> implementationsOfBusinessObject = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(s => s.GetTypes())
         .Where(businessObjectType.IsAssignableFrom).ToList();

    return ?;
}
4

1 回答 1

1

这里假设所有类型都有一个默认构造函数的可能实现。

public List<IBusinessObject> RetrieveAllBusinessObjects()
{
    var businessObjectType= typeof(IBusinessObject);

    List<Type> implementationsOfBusinessObject = AppDomain.CurrentDomain.GetAssemblies()
         .SelectMany(s => s.GetTypes())
         .Where(businessObjectType.IsAssignableFrom).ToList();

    return implementationsOfBusinessObject.Select(t => (IBusinessObject)Activator.CreateInstance(t)).ToList();
}

我还建议检查类型是否是类而不是抽象的。

通常在处理这样的场景时,最好使用可以解决所有依赖项的依赖注入容器。例如,Castle Windsor 作为一种类型化工厂工具,您可以使用它来解析所有实现特定接口的实例。查看http://docs.castleproject.org/Windsor.Typed-Factory-Facility-interface-based-factories.ashxhttp://docs.castleproject.org/Windsor.Resolvers.ashx

于 2013-10-13T20:53:52.357 回答