1

我有一个“前端”表单应用程序。

在我的应用程序中,用户可以从不同的目录中选择外部 dll 程序集:

plugins_repository_directory  
|
|    first_item_directory   
|        Plugin.dll
|        ...
|
|    second_item_directory   
|        Plugin.dll
|        ...
|     
|    last_item_directory
|        Plugin.dll

所有外部程序集都具有相同的命名空间和一些共同特征:

每个“插件”都有一个 UserControl.EntryPointView 类和一个静态 PluginInfos 类。

好的

当用户从文件系统中选择插件时,我执行以下操作:

public void LoadPlugin(string fileName){

    myPlugin= Assembly.LoadFile(fileName) //remember to use LoadFile instead of Load

    Type entryPointViewType= myPlugin.GetType("Plugin.EntryPointView");

    UserControl myPluginView (UserControl)Activator.CreateInstance(entryPointViewType);

    myFrontendPanel.Controls.add(myPluginView);

    ((IEntryPointView)myPluginView).initialize(Stuff somestuff);

    //and so on...
}

现在用户可以在前端面板中加载他的插件.. 非常好

一段时间后,用户想要加载不同的插件,因此他选择了不同的 dll 文件,基本上我处理旧的 EntryPointView 实例并再次运行 LoadPlugin()。

我想你正在理解我想要实现的目标:各种插件程序集具有相同的名称/命名空间,因为我想通过复制过去的插件项目快速构建新插件 -> 添加/删除/更改功能 -> 构建为 dll ->等等

现在这对我来说似乎是合法的,但我不是很有经验的建筑师,所以我想问一些问题:

  • 我做对了吗?
  • 有没有更好更简单的方法来实现我的目标?
  • 我的建筑下面有什么鬼鬼祟祟的陷阱吗?
  • 当用户选择另一个时,有没有办法从内存旧插件程序集中“卸载”?

先感谢您

4

0 回答 0