如何允许外部加载项轻松与.net 3.0应用程序连接?

时间:2011-02-10 10:54:21

标签: .net windows add-in

我想从我的ERP应用程序中公开一些方法(或接口),我的客户想要添加自己的模块来实现某些功能。例如,我们可以为visual studio编写自己的加载项模块。

请告诉我如何实现这一目标。

3 个答案:

答案 0 :(得分:2)

您可能希望查看MEFComposite UI Application Block之类的内容。如果你想“自己动手”,基本知识是:

  1. 定义加载项可以实现的接口
  2. 指定应用程序将搜索加载项的文件夹
  3. 让您的应用程序枚举指定文件夹中的每个程序集
    1. 使用反射从装配中加载每种类型
    2. 检查类型是否实现了您在(1)
    3. 中指定的接口
    4. 实例化实现接口的每个类型,并调用接口定义的“register”方法
  4. 在我做到这一点之前,我不能不警告你,在做到这一点时存在问题和陷阱。如果你可以使用像MEF这样的东西来为你做“繁重的工作”,那就去吧,因为它让生活变得更轻松 - 让微软有人为你写下你的插件系统好得多! =)

答案 1 :(得分:1)

我的快速建议:

  1. 使用可能的Load()挂钩/回调
  2. 公开接口
  3. 定义模块文件夹
  4. 尝试加载()模块文件夹中的每个程序集
  5. 一旦Load()编辑,请根据需要使用功能。

答案 2 :(得分:0)

我完全赞同罗布,但让我稍微延长罗布的答案。

  1. MEF非常沉重和冗长。我的意思是你必须实现从MEF的接口派生的许多特殊类,并且在大多数情况下它们只是接口的标准实现,没有特殊的逻辑。因此,如果您不需要所有这些繁重的功能并想要一些轻量级的解决方案 - 在Rob的回答中实现您自己的以下步骤。 我谈到以前版本的MEF,我不知道最后一个版本是否比以前更方便使用。

  2. 如果您决定实施自己的插件架构,我建议您考虑使用Microsoft patterns and practices Unity进行插件实例化。这将消除有关如何初始化插件的头痛,因为Unity将通过插件构造函数来处理插件所需的依赖关系。您只需要声明要作为API公开的接口。插件开发人员应该只在插件构造函数中引用这些接口。 Unity非常轻巧,易于使用。