查找不起作用的课程

时间:2017-06-23 13:57:17

标签: c#

我尝试让所有类使用此方法实现接口:

private static IEnumerable<Type> GetDriverClasses()
{
    var type = typeof(IDeviceDriver);
    var types = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(s => s.GetTypes())
                .Where(p => type.IsAssignableFrom(p) && p.IsClass && !p.IsAbstract);
    return types;
}

只要已创建类的实例,此方法就可以正常工作。否则就失败了。
如何在不必先创建实例的情况下获取课程?

其他信息:

DllSetup:
Core.dll 使用上述方法保存该类 Impl.dll 引用Core并持有类来查找
Test.dll 引用两者并调用方法

似乎与如何加载程序集有关,因为在Impl.dll中创建一个虚拟类的实例也会使另一个类可以查找。

1 个答案:

答案 0 :(得分:3)

AppDomain.CurrentDomain.GetAssemblies()将仅包含已在AppDomain中加载的程序集 - 一旦使用了程序集的类型,程序集就会被加载。您需要使用Assembly.LoadFrom(..)自己加载所有程序集。