我尝试让所有类都使用此方法实现接口:
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 中创建一个虚拟类的实例也使另一个类可以找到。
AppDomain.CurrentDomain.GetAssemblies()
将仅包含已在 AppDomain 中加载的程序集 - 一旦使用了一种类型的程序集,就会加载程序集。您需要使用Assembly.LoadFrom(..)
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句