我尝试让所有类使用此方法实现接口:
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中创建一个虚拟类的实例也会使另一个类可以查找。
答案 0 :(得分:3)
AppDomain.CurrentDomain.GetAssemblies()
将仅包含已在AppDomain中加载的程序集 - 一旦使用了程序集的类型,程序集就会被加载。您需要使用Assembly.LoadFrom(..)
自己加载所有程序集。