如何制作一个接受模块/插件的“仪表盘”工具

5
我希望这个问题有意义。基本上,我正在寻找一组指导方针,甚至是教程,来展示如何制作一个可以轻松添加和删除“模块”或“插件”的应用程序。
例如,在Microsoft Office中,您通常会看到可以下载和安装的程序,它们将在Microsoft Word(例如)中添加一个额外的选项卡,以实现一些新功能。
我有几个应用程序使用基本相同的数据源,并且我想将它们合并,并留下未来添加更多功能的可能性,而不需要1.需要全新的安装和2.微调我的代码的每个部分。
我主要是在寻找一个开始的地方。
提前致谢。
编辑:为了更详细地说明... 我心目中特别想要的东西是一个应用程序,它访问存储在文本文件中的大量数据,并使用一些数据创建一些图表和可能的一些表格。我希望能够在未来添加不同的图形,同时使用相同的数据。因此,您可以单击Button_A并生成Graph_A,然后几周后,您可以单击Button_B并生成Graph_B。
如果我能想出一种只需要一次从文件读取数据的方法,那将非常好,但我知道这将涉及对我的DataReader类进行一些调整。
3个回答

3

开始的地方可以是为您未来的模块定义一个接口,并构建一个实用程序,扫描其中所有的dll,查找实现所述接口的类。

一旦找到支持的类,您可以在运行时创建实例并添加到您的应用程序中。这是.NET中支持“插件”的常见惯用语。

Activator类是从Type在运行时创建实例的常见方式。

http://msdn.microsoft.com/en-us/library/system.activator.aspx

没有更多的信息,很难给出更多的细节。您能详细说明一下吗?

我想补充一下,这也需要更通用的插件系统解释。这不是一个简单的解决方案,你可能会很快遇到麻烦。(我目前找不到任何通用教程) - Aatch
我认为尝试从文本文件中读取这些内容会是很繁琐的工作。除非你能保证这个东西会一直保持简单,否则我建议使用动态加载可执行模块的方式。所以也许可以写一个新的控件,其中包含一个按钮和绘制图表的功能,并将其放入文件夹中供应用程序扫描和获取 - 对于像你所说的打印表格的控件也同样适用。 - Adam Rackis

3

2

正如Adam所说,首先要做的是为插件模块定义接口 - 它们可以从容器中收到什么,并且容器必须能够调用哪些方法?

就容器本身而言,我倾向于使用MEF作为位置技术;您可以创建目录并在添加新DLL时重新组合系统。我已经为解析不同文件构建了类似于此的系统,而MEF的组合功能对于运行时发现非常棒。


我已经了解了一些关于MEF的内容。它有点像IoC,但具有更强大的功能? - Adam Rackis
它并不是真正的IoC容器 - 我使用过的最接近的类比是StructureMap的SingleImplementationOfInterface/WithDefaultConventions流畅配置方法(它们在没有直接引用类/接口的情况下连接IoC)。MEF是一组用于检查在编译时未知于容器的DLL的功能,并在运行时从满足其标准的类中组合系统。如果您导入一个IEnumerable<IMyPlugin>,则会获得每个实现者的实例,如果IMyPlugin在MEF可以找到的任何程序集中。 - Matt Mills

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接