2013-12-10 45 views
2

我已經爲MEF中的ImportMany創建了自定義元數據屬性,但ImportMany始終爲空。ImportMany不能使用自定義元數據屬性

[MetadataAttribute] 
[AttributeUsage(AttributeTargets.Class ,AllowMultiple = false)] 
public class ModuleAttribute : ExportAttribute ,IModuleMetadata 
{ 
    public ModuleAttribute(string contract) 
     : base(typeof(IScreen)) 
    { 
     Name = contract; 
     Region = Region.Sidebar; 
     IsVisible = true; 
    } 

    public string Name { get; set; } 
    public string Module { get; set; } 
    public Region Region { get; set; } 
    public string DisplayName { get; set; } 
    public bool IsVisible { get; set; } 
    public string Description { get; set; } 
    public short Order { get; set; } 
    public Permissions Permissions { get; set; } 
} 

這裏是我如何導出我的課程。

[Module("Stock" ,Module = "Stock" ,Order = 1 ,Permissions = Permissions.View)] 
    internal sealed class StockWorkSpaceViewModel : Screen 

,其中屏幕爲typeof(IScreen)

這是我ImportMany。

[ImportMany] 
public IEnumerable<Lazy<IScreen ,IModuleMetadata>> Modules { get; set; } 

任何人都可以預測,我哪裏出錯了。

+0

您還可以添加IModuleMetadata的聲明嗎?它是否具有匹配的只讀屬性? –

+0

昨天,我能夠導入,當我從類中刪除默認的構造函數。如果該類具有一些代碼的無參數構造函數。導入不起作用。另外,我必須從出口中刪除合同名稱,即我必須使用合同類型進行出口。 –

+0

我還有一個名爲Settings的其他自定義導出,但現在ImportMany for settings包含來自ModuleExport的類型。我不知道爲什麼。兩者都有不同的元數據接口,但具有相同的合約類型 –

回答

0
  1. 清理的ComponnetContainer.ComposeParts
  2. 清理它必須是相同的
  3. 清理海關屬性和您在延遲初始化所使用的接口導出和導入屬性。屬性必須相同。這意味着海關屬性類實現隱含的惰性初始化。
相關問題