C#DLL的插件架构

Dar*_*ung 8 c# dll late-binding plugin-architecture

我有一个程序,我开发使用基本的插件架构.实际上,当程序加载时,它使用反射在目录中搜索适合某个接口的dll,然后加载它们.现在看来,当前的插件列表将被使用.

因此,我目前检查dll文件的做法仍然是最佳做法,还是有更好的方法来加载每个dll?

谢谢.

gid*_*eon 14

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

.NET提供了两种允许插件的方法.

  1. System.Addin
  2. MEF - 托管可扩展性框架

(1) System.Addin - 我几乎没有听到/读过很多关于它的内容.但是你可以看看这里的一些文章:
来自MSDN杂志的System.Addin文章 < - 注意Codeplex上的 2007年
System.Addin工具和示例

(2)现在,MEF,MEF真棒!它是一种将插件架构引入系统的简单方法.MEF也是Silverlight的一部分,Visual Studio 2010使用它.我可以看到你想要动态加载带有插件的dll,使用MEF你可以设计你的应用程序,你用你的软件打包的类可以在你自己的程序集(.exe)中然后你可以使用MEF来动态查找将来会有你需要的课程.整个过程本身在MEF中非常简单.

Mike Taulty有一个关于MEF的精彩视频系列

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

MEF是Codeplex上的开源

我个人认为你应该选择MEF,它新的,简单的,甚至是视觉工作室使用它,即使你可以看看:
在MEF和MAF之间选择(System.AddIn)

请查看SO上mef标签上的其他最高投票问题


The*_*her 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;
}
Run Code Online (Sandbox Code Playgroud)

然后它变成了即插即用的事情:)