2011-01-10 52 views
1

有沒有辦法告訴MEF只有在滿足某些其他依賴項dll /庫時纔會嘗試加載dll?我試圖編寫一個依賴於另一個擴展的擴展。我希望能夠檢查是否存在其他擴展名,而不是僅嘗試加載我的擴展名。它甚至有可能嗎?我已經發現瞭如何檢查某些DLL是否存在使用下面的代碼(發現某處的StackOverflow):僅當某些外部庫符合要求時,MEF纔會導出/導入

 [DllImport("kernel32", SetLastError = true)] 
     static extern IntPtr LoadLibrary(string fileName); 
     static bool CheckLibrary(string fileName) 
     { 
      return LoadLibrary(fileName) != IntPtr.Zero; 
     } 

現在我希望能夠只加載這些dll /擴展誰都有自己的依賴性滿意。

+0

所以你說你寫了一個依賴本機DLL的程序集,並且如果本機DLL丟失,你希望MEF忽略這個程序集? – 2011-01-12 13:13:02

回答

3

MEF通過拒絕自然地做到這一點。假設您希望分機A僅在分機B存在的情況下才能載入。推測這是因爲擴展A取決於擴展B提供的某些功能。在MEF中表達這一點的方式是通過導入(基數爲ExactlyOne,即不是集合導入並且不是可選)。

因此,擴展A應該有一個必需的導入,它可以通過從擴展B導出來滿足。如果擴展B不存在,那麼導入將不能被滿足,並且擴展A將被拒絕,導致它在容器中不可用。

我在我的博客文章中解釋了一點:How to Debug and Diagnose MEF Failures

+0

有趣!從來沒有想過導入其他擴展。但是如果我無法控制我要使用的其他擴展程序呢?我的意思是說它不會自行導出,但只提供我想要訂閱的服務(事件)。有沒有辦法處理這樣的情況,我不能簡單地'進口'? – ashokgelal 2011-01-11 04:36:28