因此,我当前检查DLL文件的实践是否仍然是最佳实践,还是有更好的方法来加载每个DLL?

谢谢。

有帮助吗?

解决方案

从您的问题来看,您似乎已经构建(或正在尝试构建)自己的插件架构。这不是一个好主意,因为.NET已经有了您要寻找的东西。

.NET提供2种允许插件的方法。

  1. system.addin
  2. MEF-托管可扩展性框架

(1) system.addin-我几乎听不到/读了很多有关它的信息。但是您可以在这里查看一些文章:
System.Addin文章来自MSDN杂志 < - 注意2007年
System.Addin工具和示例CodePlex

(2)

Mike Taulty在MEF上有一个精彩的视频系列

MEF文章Codeproject-第1部分 CodeProject的MEF文章 - 第2部分

MEF是Codeplex上的开源

我个人认为你 应该 与MEF一起使用,它的新,简单甚至视觉工作室都使用它,即使您也可以查看:
在MEF和MAF之间进行选择(System.Addin)

请在SO上查看其他在MEF标签上的顶级选票问题

其他提示

您可以使用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演讲之一做的不错的重新组件样本.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top