【问题标题】:Finding classes not working查找课程不起作用
【发布时间】:2017-06-23 13:57:16
【问题描述】:

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

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 中创建一个虚拟类的实例也会使其他类可以找到。

【问题讨论】:

标签: c#


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多