2012-04-20 23 views
0

閱讀此MSDN文章http://msdn.microsoft.com/en-us/library/dd460648.aspx我看到一個聲明,說MEF對程序集沒有硬依賴性。我不完全確定這意味着什麼,因爲即使合約是字符串,MEF仍然通過字符串解析,然後按類型解析。因此,主機和擴展程序集都需要對合同組件的引用。這不是一個很難的依賴嗎?解釋MEF如何不依賴程序集硬件

託管擴展性框架或MEF是用於創建輕量級,可擴展應用程序的庫。它允許應用程序開發人員 發現並使用擴展,無需配置。它也 讓擴展開發人員輕鬆封裝代碼,並避免脆弱 硬依賴關係。 MEF不僅允許在 應用程序中重複使用擴展程序,還允許跨應用程序使用擴展程序。


最後,組件開發人員必須接受硬依賴上 什麼組件包括他們實現的接口。這使得 難以在多個應用程序中使用某個組件,而 也可能會在您爲 組件創建測試框架時產生問題。


由於MEF模型需要在一個特定的應用 組件沒有硬依賴性,它允許擴展從 應用到應用中重複使用。這也使得開發一個獨立於應用程序的測試線束測試擴展組件變得容易。

有人可以向我解釋這一點嗎?也許我誤解了真正的依賴關係?

回答

3

這就是說,唯一的硬依賴關係(意思是你明確引用程序集)是在定義你的接口的程序集上。具有該接口的特定實現的組件不是硬依賴關係。

2

典型地,在MEF大多數情況下圍繞1)一臺主機,2)一個插件和3)一個插件的合同,例如,主機:

public class Host 
{ 
    [ImportMany] IEnumerable<IPlugin> Plugins { get; set; } 
} 

甲插件:

public class SomePlugin : IPlugin 
{ 
    // Operations 
} 

一個插件合同:

public interface IPlugin { } 

現在,主機在插件合同上需要一個硬的(顯式的)引用。該插件還對插件合同進行了強烈的參考。在組合時,MEF使用後期綁定在運行時加載插件程序集。正因爲如此,你的主機並不明確依賴於插件程序集,它的唯一依賴是插件契約程序集。

相關問題