我目前正在嘗試用MEF構建一個簡單的概念驗證,但是我無法使其工作。我在我的解決方案中有三個項目:MEF部分只有在有導出定義時才被發現
- 定義簡單類的可移植類庫(我們在這裏稱它爲
Component
)。 限定其從按鈕派生的類,並聲明
甲.NET庫:
public class ComponentButton : Button { [Import] public Component Component { get; set; } }
一個WPF應用程序,其主窗口具有類型的屬性ComponentButton(標記爲
Export
),它在構造函數中初始化。然後,我想使用MEF這個組件分配給顯示在窗口中(目前唯一一個在XAML定義)的所有按鈕:[Export] public Component Component { get; private set; } public MainWindow() { InitializeComponent(); this.Component = new Component(); var container = new CompositionContainer(new DirectoryCatalog(".", "*")); try { container.ComposeParts(this); } catch (CompositionException compositionException) { Debugger.Break(); } }
Component
類型標有一個
Import
屬性的屬性
但是,這是行不通的。沒有拋出異常,但組件未分配給按鈕。當我查看調試器中的目錄時,我可以看到,當所有程序集都加載並找到ExportDefinition時,它找不到導入定義。但真正讓我困惑的是,當我增加一個出口按鈕,它突然檢測到按鈕的出口和進口兩種:
[Export]
public string Dummy { get; set; }
但即便如此,它仍然沒有分量分配給按鈕。這是怎麼回事?