我开发了一个使用基本插件架构的程序。实际上,当程序加载时,它使用反射在目录中搜索适合某个接口的dll,然后加载它们。 现在看来,当前的插件列表将会被使用。
因此,我目前检查dll文件的做法仍然是最佳做法,还是有更好的方法来加载每个dll?
感谢。
答案 0 :(得分:14)
从您的问题看起来您已经构建(或正在尝试构建)您自己的插件架构。它不是一个好主意,因为.NET已经有了你想要的东西。
.NET提供了2种允许插件的方法。
(1) System.Addin - 我几乎听不到/读过很多关于它的内容。但你可以看看这里的一些文章:
System.Addin article from MSDN magazine< - 注意2007年年份
System.Addin tools and examples at Codeplex
(2)现在,MEF,MEF真棒!它是一种将插件架构引入系统的简单方法。 MEF也是Silverlight的一部分,Visual Studio 2010使用它。我可以看到你想要动态加载带有插件的dll,使用MEF你可以设计你的应用程序,你用你的软件打包的类可以在你自己的程序集(.exe)中然后你可以使用MEF来动态查找将来会有你需要的课程。在MEF中,整个过程本身非常简单。
Mike Taulty has a brilliant video series on MEF
MEF Article at Codeproject - Part 1 MEF Article at Codeproject - Part 2
MEF is Open Source on Codeplex
我个人认为你应该与MEF一起使用,它的新的,简单的,甚至是视觉工作室使用它,即使你可以看看:
Choosing between MEF and MAF (System.AddIn)
答案 1 :(得分:6)
您可以使用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;
}
然后它变成了即插即用事件:)
答案 2 :(得分:3)
参考MEF 它是用于创建插件设计的非常强大的架构解决方案。
答案 3 :(得分:1)
这很好。或者,您可以定义要在配置文件中加载哪些程序集,如果您觉得所述文件夹中有大量DLL可能会影响您的应用程序,并且可能存在一些安全问题,因为任何人都可能将DLL推入该文件夹。
答案 4 :(得分:0)
我认为你的设计还可以。
答案 5 :(得分:0)
对于您的场景,我建议使用MEF及其DirectoryCatalog从特定文件夹加载插件。如果您另外配置文件系统观察程序并在文件夹更改时刷新DirectoryCatalog,由于MEF的重新组合功能,您将能够在运行时提取新插件!顺便说一句,你可以看到nice recomposition sample I did for one of my MEF talks。