我有一个“前端”表单应用程序。
在我的应用程序中,用户可以从不同目录中选择外部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形式构建-> etvoilà
现在对我来说似乎合法,但我不是非常有经验的建筑师,所以我想问一些问题:
先谢谢您