如何在c#中创建可插入的GUI和DLL

时间:2012-10-05 17:15:01

标签: c# winforms pluggable

不确定此处使用的确切条款,因此我们将不胜感激。

为了最简单,我有一个表单应用程序。当我加载“form.exe”时,表单有一个控件,一个菜单。此菜单有一个菜单项“退出”。我想要的是,当表单加载时,能够将参数传递给此表单应用程序,指定可以添加专门方法,控件等的DLL。

现在当我加载“form.exe add_plugable.dll”时,我的菜单中有另一个菜单项“添加”。 当我加载“form.exe add_plugable.dll remove_pluggable.dll”时,菜单中有3个项目“退出”,“添加”和“删除”。

希望这是有道理的。我需要在Forms应用程序中包含什么以及如何创建DLL?我知道我需要一个通用接口,但不知道如何使用命名空间和接口以及抽象类来完成此任务。

谢谢!

2 个答案:

答案 0 :(得分:6)

我建议您查看Managed Extensibility Framework。它是为这种确切类型的场景而设计的。

例如,它是Visual Studio用于其可扩展性的内容,因此可以在运行时动态发现和插入add ins。

答案 1 :(得分:5)

您可以使用预先编写的框架,但如果您正在寻找“裸骨”解决方案,请尝试以下方法:

  1. 创建一个接口(或一组接口,如果您愿意),其中包含表单应用程序将调用的所有方法,例如: IPlugin。将接口放在单独的类库中。
  2. 在每个插件DLL中,创建一个实现IPlugin
  3. 的公共类
  4. 在表单应用中,确定要加载的插件以及何时调用它们。这个逻辑完全取决于你。
  5. 加载这样的插件,然后调用接口成员来完成你想要的。您可以从app.config,数据库中读取插件文件和类名,或者根据您的要求通过命名约定来计算它们。

    var pluginAssembly = Assembly.Load(pluginFileName);
    var plugin = (IPlugin) pluginAssembly.CreateInstance(pluginClassName);
    

    这些方法有几个重载,可以更好地控制过程。例如,您可以使用AssemblyName而不是简单的字符串加载插件程序集。在实例化类时,您可以指定绑定标志和一组参数值以传递给类的构造函数。