2010-10-25 27 views
1

這樣做的正確方法是什麼? 假設我們的項目中有一些第三方庫,我們需要提供一些密封的控件。 新的小部件將被創建並使用MEF添加到應用程序中,他們應該能夠從核心應用程序中導入一些控件。 那麼如何正確導出這些控件呢?在MEF中公開第三方視覺控制的正確方法

回答

0

如果您不能修改原始類(如ThirdPartyComponent),那麼你可以做通過屬性出口的另一個類(如ThirdPartyComponentExporter):

public class ThirdPartyComponentExporter 
{ 
    [Export(typeof(ThirdPartyComponent))] 
    public ThirdPartyComponent Foo 
    { 
     get 
     { 
     return new ThirdPartyComponent(); 
     } 
    } 
} 

對於可視化控件,您可能必須使用CreationPolicy.NonShared以防止MEF在不同地點重複使用相同的實例。

+0

共享默認創建策略?我嘗試了類似的東西,並添加了我想要在用戶控件內導出的控件,並通過屬性對其進行了公開。然後我將該用戶控件添加到主頁面(因爲我想在視覺設計器中看到導出的控件,而這是我設法實現的唯一方法)。它看起來像兩個不同的可導出控件實例正在創建,一個是由MEF創建的,另一個是不同的實例,因爲我添加了一個包含可導出頁面的用戶控件。 – incognito 2010-10-26 15:06:14

+0

yes shared是默認的創建策略。 – blindmeis 2010-10-26 15:18:04

+1

@Incognito:默認情況下,MEF將嘗試重用它自己創建的實例。但是它不會重用* you *創建的實例,如您在此處所述。它不知道這些實例。 – 2010-10-26 15:23:30

0

如何在「導出」類中包裝第三方控件,然後通過包裝器訪問此控件?

+0

這實際上是我現在正在做的。但是我失去了Blendability,因爲我無法再將導出的控件添加到Xaml中,所以它似乎不是正確的方法。我需要共享單個控件的實例,因此現在即使它已經可以訪問(例如在Main頁面中),我必須使用導入機制並將其添加到代碼隱藏的某個容器中。 – incognito 2010-10-26 14:48:31