从实现接口的抽象类继承的类,并反射性地加载它

本文关键字:反射性 加载 实现 接口 抽象类 继承 | 更新日期: 2023-09-27 18:34:38

我有一个名为IPlugin的接口。这是在一个名为TimerClass的抽象类中实现的。然后有一个名为 Test 的类,它继承自 TimerClass。

Test 类位于它自己的 dll 中,并通过反射加载。

如果我不使用 TimerClass(只需在测试中实现 IPlugin(,这非常有效。

我的代码以反射方式加载测试类作为接口(IPlugin(如下所示:

    private IPlugin GetInterface(Assembly assembly)
    {
        IPlugin PluginFound = null;
        var iPluginType = typeof (IPlugin);
        var types = assembly.GetExportedTypes();
        foreach (var type in types)
            if (iPluginType.IsAssignableFrom(type))
            {
                var operation = Activator.CreateInstance(type) as IPlugin;
                if (operation != null)
                {
                    PluginFound = operation;
                    break;
                }
            }
        return PluginFound;
    }

这部分代码:var operation = Activator.CreateInstance(type) as IPlugin;加载 Test 类时崩溃。

起初我认为可能是它尝试加载抽象类 TimerClass,但这似乎很牵强,因为此类不是在同一个 DLL 中实现的。我也调试了它,并查看了程序集,对我来说似乎加载了正确的类......

谁能告诉我为什么会发生这种情况,如果有我没有看到的解决方案?

从实现接口的抽象类继承的类,并反射性地加载它

很尴尬。

它失败的原因是 TimerClass 有一个定义计时器间隔的属性。这将停止并启动计时器,因此在创建计时器之前调用此计时器时...井。。。。然后它崩溃了....

很抱歉浪费了你的时间,但非常感谢你帮助我!