我一直在寻找为我的应用程序提供插件支持的不同方法。理想情况下,我将创建一个核心功能,并基于不同的客户开发不同的插件/插件,如导入,导出数据等......有哪些方法可以通过插件架构使C#应用程序可扩展?
让我们举一个例子。如果我们有一个程序包含一个主菜单(File,Edit,View等)以及一个TreeView,它显示按制造商分组的不同品牌的汽车(福特,GM,目前)。右键单击汽车会显示一个上下文菜单,唯一的选项是“删除汽车”。
如何开发应用程序以便可以部署插件,以便允许一个客户在TreeView中看到一个新品牌,比方说本田,还可以扩展汽车上下文菜单,以便他们现在可以画一辆车'?
在Eclipse / RCP开发中,扩展点和插件可以轻松处理。 C#如何处理它?我一直在研究开发自己的插件架构并阅读MEF。
答案 0 :(得分:10)
MEF将是一个很好的起点。
Glenn Block的文章Managed Extensibility Framework: Building Composable Apps in .NET 4 with the Managed Extensibility Framework提供了一个很好的概述。
顺便说一下,不要被标题所迷惑 - 你也可以获得.NET 3.5 SP1的MEF。答案 1 :(得分:1)
Visual Studio 2010使用MEF,所以我认为这是一个安全的选择,这是MS的首选方式。 System.Addin似乎总是有点沉重,但如果你需要插件来工作并且你的代码库不断发展,它可能是更好的选择。
如果你关心隔离插件,你应该阅读AppDomains。我有一个演示项目,我帮助学习如何处理isolating assemblies within an AppDomain here,你可能会觉得有趣。关于隔离的快速事实:只有你的类型应该越过边界,这些类型应该被密封,从跨域事件处理中尖叫运行,并且插件永远不应该扩展MarshallByRefObject。