2012-05-04 88 views
2

我終於開始與MEF玩味,只是發現解決我的旗艦問題並不那麼簡單。MEF與反思

問題: 我有一個WCF服務,依靠一些自定義算法,每個生活在他們自己的程序集。當調用某個方法時,部分請求的數據合約將識別需要哪些算法。例如,類1和類2實現了一個NameFile()方法,而類A和B都實現了EncryptFile()。

對服務的WriteFile()的一次調用可能需要調用Two.NameFile和A.EncryptFile,而另一個可能需要One.NameFile和B.EncryptFile。

嘗試: MEF(我是新來的)似乎是加載程序集的好方法,但是到目前爲止我發現的東西好像我需要經過一些步驟來確定在運行時哪個可用的合同會議組件符合需要。簡單的舊的反映似乎是一個更直接的方式來決定和加載時,只有在通話期間才知道特定需求。

問題 MEF確實更適合其他動態加載場景,還是僅僅是我的MEF noobism?

感謝,

約翰

回答

2

是MEF確實更適合於其他動態加載的場景,或只是我的MEF noobism?

那麼,主要問題是在運行時確定哪些選項符合您希望使用的合同。

無論您選擇什麼 - 無論是MEF,其他注射機制還是使用反射來滾動您自己的版本,都必須進行此確定。

然而,MEF應該比自己的版本更簡單,因爲它易於使用[ImportMany]從所有可用裝配中導入所有IFileEncryptor(或其他)實施。此時,從可用列表中確定正確的應該相當簡單。使用反射,你可以從特定的程序集中抓取特定的類型 - 這實際上違背了動態實現這一目的的目的。 MEF可以很容易地擴展此服務,而無需重新編譯或更改代碼,因爲您可以放置​​新的程序集並使其自動發現。

+0

重新審視之後(感謝您的保證,我沒有走錯路徑),似乎在Lazy 中添加元數據屬性比我的第一次閱讀更直接。 –