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

Tiz*_*izz 4 c# winforms pluggable

不确定在这里使用的确切条款,所以任何帮助将不胜感激.

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

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

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

谢谢!

Ree*_*sey 6

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

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


Chr*_*ter 6

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

  1. 创建一个接口(或一组接口,如果您愿意),其中包含表单应用程序将调用的所有方法,例如IPlugin.将接口放在单独的类库中.
  2. 在每个插件DLL中,创建一个实现的公共类IPlugin.
  3. 在表单应用程序中,确定要加载的插件以及何时调用它们.这个逻辑完全取决于你.

加载这样的插件,然后调用接口成员来完成你想要的.您可以从app.config数据库中读取插件文件和类名,或者根据您的要求通过命名约定来计算它们.

var pluginAssembly = Assembly.Load(pluginFileName);
var plugin = (IPlugin) pluginAssembly.CreateInstance(pluginClassName);
Run Code Online (Sandbox Code Playgroud)

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