我正在爲將在數百臺計算機上安裝的組織創建一項服務。它的實施可能需要隨時間而改變。在看了一些關於MEF的文章之後,我仍然有點失落。如果我想將一個dll放入服務文件夾並使該服務接受更改,MEF是否是一個很好的解決方案?託管擴展性框架
託管擴展性框架
回答
我已經用MEF做了很多。是的,MEF會做你要找的內容,一個警告...
- 您可以發現和新的DLL加載在運行時
- 然而,它加載到相同的應用程序域你的主要應用程序,這樣,
- 您無法卸載或更改DLL而不需要重新啓動你的應用程序
如果最後一點是一個問題,考慮MAF(儘管它更重)。但在MAF中,它會將您的擴展加載到單獨的應用程序域中。
您的其他選項是產生另一個進程來處理請求,並將命令行參數傳遞給它。
謝謝澄清。重新啓動應該不成問題。 – Jesse
我認爲你可以做到這一點,如果你有你的服務邏輯在一個單獨的類庫中,並且你在另一個類庫中獲得了所需的契約接口。然後你可以創建一個目錄目錄,並用MEF導入你的服務實現(你只需要引用合同接口程序集)。然後,如果更改,您可以選擇新的dll /服務實現。您只需要一個目錄觀察器(FileSystemWatcher),然後當目錄觀察器激發時您必須調用您的目錄的刷新方法。理論上它應該有效,但這只是一個想法。 :)無論如何,希望這有助於。
我不是MEF的專家。文檔說Mef是關於製作基於插件的系統的。所以你的系統需要一些接口,並且MEF可以很容易地將實現這些接口的類導入到你的系統中。你的情況似乎適用於這個。 MEF具有目錄編目,並且通過使用目錄可以導入類型/ dll運行時。
你也可以考慮Prism。據我所知,他們是兩個不同的框架來做幾乎相同的事情。 Prism允許您通過在實現IModule接口的dll中創建一個類來創建模塊。就像在MEF中一樣,您可以將dll拖放到文件夾中。你可以靜態或動態地加載模塊,並做一些我甚至不知道的其他事情。棱鏡也有與之捆綁在一起的其他功能,即Unity依賴注入容器(我喜歡稱之爲「魔法黑盒子」),整潔的事件和命令系統等。我確信MEF擁有所有這些也是如此。
如果您使用VS2010我建議您先嚐試點擊一次。它爲您提供了setup.exe,同時也爲您提供了一個HTML文件(以及其他文件),您可以上傳到IIS服務器或FTP站點,甚至可以通過本地網絡訪問共享文件夾。事情是,當你配置你的部署時,你可以告訴安裝者直接從站點(HTML文件,ftp或lan共享文件夾)直接自動更新所有客戶端。當用戶啓動應用程序時,它將連接到該站點並詢問是否存在更新,如果存在,則應用程序將自行更新。如果您想部署更新,則只需要再次上傳文件夾中的HTML文件和所有其他文件。
看看這個鏈接:
http://msdn.microsoft.com/en-us/library/ms953320.aspx
快樂編碼;)
- 1. Silverlight - Prism,Unity和託管擴展框架,
- 2. .NET的託管擴展框架?
- 3. MEF(託管擴展框架)與IoC/DI
- 4. 託管的可擴展框架和AssemblyInfo.cs
- 5. 託管擴展性框架(MEF),爲什麼需要導入?
- 6. 託管擴展性框架,攔截和動態代理
- 7. 什麼是託管擴展性框架(MEF)?
- 8. 什麼時候應該使用託管擴展性框架?
- 9. 使用託管擴展框架和底框架
- 10. 工廠模式與託管擴展框架(MEF)
- 11. MEF(託管擴展框架)做「鴨」打字嗎?
- 12. 帶有託管擴展框架的沙盒插件
- 13. 託管擴展性框架(MEF)與複合UI應用程序塊(CAB)
- 14. 用於.NET Framework 2.0的MEF(託管擴展性框架)之類的東西
- 15. Auth0委託管理擴展
- 16. 可擴展的Servlet託管
- 17. 如何託管Chrome擴展?
- 18. Microsoft擴展性框架 - MEF CompositionContainer
- 19. 歐洲Zend框架託管
- 20. Bot框架需要託管?
- 21. 實體框架可擴展的框架
- 22. 如何加載使用MEF(託管擴展框架)從目錄中的DLL
- 23. 如何擴展Eclipse框架?
- 24. 擴展Spring框架(Java)Servlet
- 25. Yii框架gallerymanager擴展
- 26. 擴展實體框架類
- 27. 擴展實體框架
- 28. 類擴展和框架
- 29. Yii框架ChildrenRequiredValidator擴展
- 30. 果園可擴展框架
你的 「拿起變化」 意味着什麼呢?你的意思是你想添加模塊到應用程序而不重新編譯它?或者更改應用程序而不重新啓動它?或者是其他東西? –
我想更改應用程序而不編譯,刪除服務,重新安裝服務。超過100安裝這是必須的。 – Jesse