使用插件支持构建应用程序

时间:2010-07-15 17:46:23

标签: c# .net plugins

我正在开始一个新项目,这将大大受益于程序附加组件。最基本形式的程序从串行端口读取数据并将其解析为数据库记录。可以编写的附加组件的示例是自动存档附加组件,过滤器记录的附加组件等。我正在编写程序和附加组件,但是一些客户需要自定义解决方案,所以而不是分支和制作一个完全独立的程序,附加组件将是伟大的。最简单的附加组件可能是构造函数接受对象引用,以某种方式操作对象然后关闭的形式。

不幸的是,我完全不知道从哪里开始编码,几乎不知道在哪里搜索。我搜索的所有内容都会显示浏览器加载项。从我拥有收集的内容,我需要研究动态加载DLL。除此之外,我很无能为力。有没有人有他们所知道的任何好资源或例子?

我很乐意提供更多详细信息,但是这个项目已经开始了,所以我没有大量的具体细节(特定类型也打败了附加组件。)

6 个答案:

答案 0 :(得分:8)

您应该认真考虑使用Managed Extensibility Framework(MEF)来处理插件架构。它需要对事物的思考方式略有不同,但值得思考的是。

答案 1 :(得分:6)

这是一个简单的例子来说明基本技术。

codeproject.com - Plugin Architecture using C#

  

本文向您展示如何   合并......作为一个   插件用于其他应用程序或使用   它是一个独立的应用程序。

在.NET 4中,您现在可以使用Managed Extensibility Framework (MEF)来完成大部分管道工作。

在.NET 3.5中,您拥有System.AddIn,但许多人认为它过于复杂。

codeproject.com - AddIn Enabled Applications with System.AddIn

  

AddIns(有时称为插件)是   单独编译的组件   应用程序可以定位,加载和制作   在运行时使用(动态)。一个   已经设计的应用程序   使用AddIns可以增强(通过   开发更多的AddIns)没有   需要原始申请   修改或重新编译和测试

答案 2 :(得分:4)

你真的需要看看Managed Extensibility Framework (MEF)。这是专门为帮助支持附加组件和其他可扩展性而设计的。

答案 3 :(得分:2)

一个非常基本的描述(基本上,你的插件必须实现一个特殊的接口):

http://martinfowler.com/eaaCatalog/plugin.html

更好的文章,在C#中:

http://www.drdobbs.com/184403942;jsessionid=TVLM2PGYFZZB1QE1GHPCKHWATMY32JVN

答案 4 :(得分:0)

我认为Reflection将发挥重要作用。

我对一个有插件文件夹的应用程序表示满意。文件系统观察者会看到该文件夹​​,当新的DLL被放入其中时,它将使用反射来确定它包含哪些类型的插件,加载它们,并将它们添加到可用类列表等。

答案 5 :(得分:0)

尝试使用“加载项”或“插件”这一术语代替“附加组件”。这应该有所帮助。

如果您正在使用.Net 4,那么框架中会有一个加载项命名空间,可以帮助您在那里工作。

为应用程序编写插件支持并非易事。您必须在界面中保持非常严格的关注点分离,您需要提供一个互操作库来定义支持的插件类型的 ALL ,并且您需要对依赖注射进行一些研究除了先前提出的反思研究之外,还有反转控制。

听起来你可能在周末忙着做研究。