继承自实现接口的抽象类并反射加载的类

时间:2013-10-10 07:53:53

标签: c# inheritance reflection interface abstract-class

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

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

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

我的代码将Test类反向加载为接口(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类时崩溃。

起初我认为它可能会尝试加载Abstract类TimerClass,但这似乎远远没有了,因为这个类没有在同一个DLL中实现。我也调试了它,并查看了程序集,对我来说似乎正在加载正确的类......

任何人都可以告诉我为什么会这样,如果有一个我没有看到的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这是令人尴尬的......

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

我很遗憾浪费你的时间,但非常感谢你帮助我!