因此,我的目前做法仍然是检查dll文件的最佳实践,还是有更好的方法来加载每个dll?
谢谢。
从你的问题看来,你已经构建了(或者正在尝试构建)自己的插件架构。这并不是一个好主意,因为.NET已经拥有了你需要的东西。
.NET有两种方式允许插件:
(1) System.Addin - 我几乎没有听说过它。但是你可以在这里看一些文章:
来自MSDN杂志的System.Addin文章 <- 注意年份为2007年
Codeplex上的System.Addin工具和示例
(2) 现在,MEF,MEF非常棒!它是一种很好的,易于介绍到你的系统中的插件架构。MEF也是Silverlight的一部分,Visual Studio 2010也使用它。我可以看出你想要动态加载dll作为插件,使用MEF,你可以设计你的应用程序,让你打包到软件中的类可以在你自己的程序集(.exe)中,然后你可以使用MEF动态查找未来将拥有你所需类的dll。整个过程在MEF中非常简单。
Codeproject的MEF文章 - 第1部分 Codeproject的MEF文章 - 第2部分
我个人认为你应该采用 MEF,它是新的、易用的,甚至 Visual Studio 也在使用它,你可以查看以下链接来了解更多信息:
选择 MEF 和 MAF (System.AddIn) 之间的区别
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;
}
这很好。另外,如果您觉得在该文件夹中有大量 DLL 可能会影响您的应用程序并可能存在安全问题,任何人都可能将 DLL 推入该文件夹中,您也可以在配置文件中定义要加载的程序集。
我认为您的设计很不错。
针对您的情况,我建议使用MEF及其DirectoryCatalog从特定文件夹加载插件。如果您还配置了文件系统监视器并在文件夹更改时刷新DirectoryCatalog,由于MEF的重新组合功能,您将能够在运行时拉取新的插件!顺便说一句,您可以查看我为我的一个MEF演讲做的不错的重新组合示例。