2014-09-10 78 views
0

我試圖導出所有實現了IJob接口的類,同時還在各個類級別傳遞元數據。我已經試過:具有繼承導出的元數據

出口:

[InheritedExport(typeof(IJob))] 
public interface IJob 
{ 
    int Run(); 
} 

導入:

[ImportMany] 
    public IEnumerable<Lazy<IJob, IJobMetaData>> Jobs { get; set; } 

實現:

[IgnoreJob(false)] 
public class MyJob : IJob 
{ 
    public int Run() 
    { 
     return 5; 
    } 
} 

屬性設置:

[MetadataAttribute] 
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] 
public class IgnoreJobAttribute : ExportAttribute, IJobMetaData 
{ 
    public IgnoreJobAttribute(bool ignore) 
     : base(typeof(IJobMetaData)) 
    { 
     Ignore = ignore; 
    } 

    [DefaultValue(true)] 
    public bool Ignore { get; set; } 
} 
上述

通過我的元數據,但如果我刪除InheritedExport屬性並添加Export屬性對個人實施IJob的正常工作......

+0

可能的重複:http://stackoverflow.com/questions/6570930/how-to-use-mef-inherited-export-metadata – 2014-09-10 16:44:28

+0

不幸的不是!他們至少有*一些*元數據,我沒有。 – InContext 2014-09-10 16:52:40

回答

1

看看這個:How to use MEF Inherited Export & MetaData?

事實證明,在註冊InheritedExport時,與導出相關的元數據必須可用。 MEF將從給定類繼承後的所有輸出視爲同一種輸出。因此,您在子類中定義的元數據將被忽略。

所以你不能在這種情況下使用InheritedExport,恐怕。

正如我所看到的,你已經從ExportAttributeIgnoreJobAttribute繼承,因此,你應該能夠降InheritedExportAttribute基類,只要你保持每天IJob你定義一個IgnoreJobAttribute