2011-03-04 222 views
4

我正在爲將在數百臺計算機上安裝的組織創建一項服務。它的實施可能需要隨時間而改變。在看了一些關於MEF的文章之後,我仍然有點失落。如果我想將一個dll放入服務文件夾並使該服務接受更改,MEF是否是一個很好的解決方案?託管擴展性框架

+0

你的 「拿起變化」 意味着什麼呢?你的意思是你想添加模塊到應用程序而不重新編譯它?或者更改應用程序而不重新啓動它?或者是其他東西? –

+0

我想更改應用程序而不編譯,刪除服務,重新安裝服務。超過100安裝這是必須的。 – Jesse

回答

3

我已經用MEF做了很多。是的,MEF會做你要找的內容,一個警告...

  • 可以發現和新的DLL加載在運行時
  • 然而,它加載到相同的應用程序域你的主要應用程序,這樣,
  • 無法卸載或更改DLL而不需要重新啓動你的應用程序

如果最後一點是一個問題,考慮MAF(儘管它更重)。但在MAF中,它會將您的擴展加載到單獨的應用程序域中。

您的其他選項是產生另一個進程來處理請求,並將命令行參數傳遞給它。

+0

謝謝澄清。重新啓動應該不成問題。 – Jesse

0

我認爲你可以做到這一點,如果你有你的服務邏輯在一個單獨的類庫中,並且你在另一個類庫中獲得了所需的契約接口。然後你可以創建一個目錄目錄,並用MEF導入你的服務實現(你只需要引用合同接口程序集)。然後,如果更改,您可以選擇新的dll /服務實現。您只需要一個目錄觀察器(FileSystemWatcher),然後當目錄觀察器激發時您必須調用您的目錄的刷新方法。理論上它應該有效,但這只是一個想法。 :)無論如何,希望這有助於。

0

你也可以考慮Prism。據我所知,他們是兩個不同的框架來做幾乎相同的事情。 Prism允許您通過在實現IModule接口的dll中創建一個類來創建模塊。就像在MEF中一樣,您可以將dll拖放到文件夾中。你可以靜態或動態地加載模塊,並做一些我甚至不知道的其他事情。棱鏡也有與之捆綁在一起的其他功能,即Unity依賴注入容器(我喜歡稱之爲「魔法黑盒子」),整潔的事件和命令系統等。我確信MEF擁有所有這些也是如此。

1

如果您使用VS2010我建議您先嚐試點擊一次。它爲您提供了setup.exe,同時也爲您提供了一個HTML文件(以及其他文件),您可以上傳到IIS服務器或FTP站點,甚至可以通過本地網絡訪問共享文件夾。事情是,當你配置你的部署時,你可以告訴安裝者直接從站點(HTML文件,ftp或lan共享文件夾)直接自動更新所有客戶端。當用戶啓動應用程序時,它將連接到該站點並詢問是否存在更新,如果存在,則應用程序將自行更新。如果您想部署更新,則只需要再次上傳文件夾中的HTML文件和所有其他文件。

看看這個鏈接:

http://msdn.microsoft.com/en-us/library/ms953320.aspx

http://weblogs.asp.net/shahar/archive/2008/01/29/how-to-use-clickonce-to-deploy-your-applications.aspx

快樂編碼;)