我有一個程序,我開發使用基本的插件架構。實際上,當程序加載時,它使用反射來搜索適合某個接口的dll的目錄,然後加載它們。 現在看來,目前的插件列表是所有將被使用的。C#DLL的插件架構
因此,我目前的做法是檢查dll文件還是最佳做法,還是有更好的方法來加載每個dll?
感謝。
我有一個程序,我開發使用基本的插件架構。實際上,當程序加載時,它使用反射來搜索適合某個接口的dll的目錄,然後加載它們。 現在看來,目前的插件列表是所有將被使用的。C#DLL的插件架構
因此,我目前的做法是檢查dll文件還是最佳做法,還是有更好的方法來加載每個dll?
感謝。
從您的問題看,您似乎已經構建(或正在嘗試構建)您自己的插件架構。它不是一個好主意,因爲.NET已經有你正在尋找的東西。
.NET帶有兩種允許插件的方式。
(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動態查找在將來會有你需要的類的dll。整個過程本身在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,其新的,易於甚至Visual Studio中使用它,即使是這樣,你可以去看看at:
Choosing between MEF and 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推送到該文件夾中,您也可以定義要將哪些程序集加載到配置文件中。
我覺得你的設計還行。
對於您的場景,我建議使用MEF及其DirectoryCatalog從特定文件夾加載插件。如果您另外配置文件系統觀察器並刷新文件夾更改的DirectoryCatalog,多虧了MEF的重新構建功能,您將能夠在運行時提取新的插件!順便說一句,你可以看到一個nice recomposition sample I did for one of my MEF talks。
你能用你的示例代碼來澄清一下你的問題嗎?我問這是因爲我已經開發了一個非常類似的插件體系結構,它正在掃描插件目錄中的dll。如果我們能看到你的相關資料,我想我們可以提供建議。 – HuseyinUslu 2011-01-20 14:05:24