我正在开始一个新项目,这将大大受益于程序附加组件。最基本形式的程序从串行端口读取数据并将其解析为数据库记录。可以编写的附加组件的示例是自动存档附加组件,过滤器记录的附加组件等。我正在编写程序和附加组件,但是一些客户需要自定义解决方案,所以而不是分支和制作一个完全独立的程序,附加组件将是伟大的。最简单的附加组件可能是构造函数接受对象引用,以某种方式操作对象然后关闭的形式。
不幸的是,我完全不知道从哪里开始编码,几乎不知道在哪里搜索。我搜索的所有内容都会显示浏览器加载项。从我拥有收集的内容,我需要研究动态加载DLL。除此之外,我很无能为力。有没有人有他们所知道的任何好资源或例子?
我很乐意提供更多详细信息,但是这个项目已经开始了,所以我没有大量的具体细节(特定类型也打败了附加组件。)
答案 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 ,并且您需要对依赖注射进行一些研究除了先前提出的反思研究之外,还有反转控制。
听起来你可能在周末忙着做研究。