我必须为我的应用程序实现一个插件架构。
我有主应用程序和库,我需要在运行时加载。我需要我的主应用程序了解dll中定义的类,以便在动态调用期间正确处理它们。
我是否需要实现额外的dll与接口来实现这一目标,或者它是一些其他的方式做到这一点?
可以使用程序集加载库。加载,然后需要一种方法来检测需要实例化的类型。你可以用接口(即IPlugin)标记类,然后看看你正在检查的类型是否可以使用IsAssignableFrom方法分配给IPlugin类型。另一种方法是用自定义属性标记你的类,看看你正在检查的类型是否有这个属性(即PluginAttribute)。在这两种情况下,你都需要把接口或属性类放在第三个库中,这样它就可以在主应用程序和插件库中被引用。
您可以使用程序集。加载,然后使用反射来检查共享接口/属性的类型。
您考虑过托管可扩展性框架吗?该链接还有一个很好的示例