C#DLL的插件结构
-
13-10-2019 - |
题
因此,我当前检查DLL文件的实践是否仍然是最佳实践,还是有更好的方法来加载每个DLL?
谢谢。
解决方案
从您的问题来看,您似乎已经构建(或正在尝试构建)自己的插件架构。这不是一个好主意,因为.NET已经有了您要寻找的东西。
.NET提供2种允许插件的方法。
- system.addin
- MEF-托管可扩展性框架
(1) system.addin-我几乎听不到/读了很多有关它的信息。但是您可以在这里查看一些文章:
System.Addin文章来自MSDN杂志 < - 注意2007年
System.Addin工具和示例CodePlex
(2)
MEF文章Codeproject-第1部分 CodeProject的MEF文章 - 第2部分
我个人认为你 应该 与MEF一起使用,它的新,简单甚至视觉工作室都使用它,即使您也可以查看:
在MEF和MAF之间进行选择(System.Addin)
其他提示
您可以使用Filesystemwatcher类监视更改目录。
publicvoid CreateWatcher()
{
//Create a new FileSystemWatcher.
FileSystemWatcher watcher = newFileSystemWatcher();
//Set the filter to only catch DLL files.
watcher.Filter = "*.dll";
//Subscribe to the Created event.
watcher.Created += new
FileSystemEventHandler(watcher_FileCreated);
//Set the path to C:\Temp\
watcher.Path = @"C:\Temp\";
//Enable the FileSystemWatcher events.
watcher.EnableRaisingEvents = true;
}
然后,它变成了插头和播放事件:)
参考 MEF这是一个非常强大的架构解决方案,用于创建插件设计。
这很好。另外,您也可以定义在配置文件中加载的程序集,如果您认为在上述文件夹中有大量DLL可能会影响您的应用程序,并且可能会有一些安全问题,因为任何人都可能将DLL推入该文件夹。
- 由于插件的含义是:“您的Donot知道要提前加载的DLL”,因此无法提早绑定“未知dll”,您必须加载和搜索接口实现并使用一种 较晚的绑定.
- “搜索DLL”而不是“编辑配置”非常用户友好。在大多数情况下,搜索DLL并不是性能问题,因为它在程序启动时仅完成一次。
我认为 您的设计还可以。
对于您的情况,我建议使用MEF及其DirectoryCatalog从特定文件夹加载插件。如果您还在文件夹更改上配置文件系统观察器和Refresh DirectoryCatalog,这要归功于MEF的重组功能,您将能够在运行时拉新的插件!顺便说一句,你可以看到 我为我的MEF演讲之一做的不错的重新组件样本.
不隶属于 StackOverflow