C# 具有InheriteExport的元数据

C# 具有InheriteExport的元数据,c#,mef,custom-attributes,extensibility,C#,Mef,Custom Attributes,Extensibility,我试图导出实现IJob接口的所有类,同时在单个类级别传递元数据。我所尝试的: 出口: [InheritedExport(typeof(IJob))] public interface IJob { int Run(); } 进口: [ImportMany] public IEnumerable<Lazy<IJob, IJobMetaData>> Jobs { get; set; } 属性设置: [MetadataAttribute] [Attr

我试图导出实现
IJob
接口的所有类,同时在单个类级别传递元数据。我所尝试的:

出口:

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

    [ImportMany]
    public IEnumerable<Lazy<IJob, IJobMetaData>> Jobs { get; set; }
属性设置:

[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的单个实现中,它就可以正常工作了…

请查看以下内容:

事实证明,在注册InheritedExport时,与导出关联的元数据必须可用。MEF将从给定类继承后进行的所有导出视为相同类型的导出。因此,子类中定义的元数据将被忽略

在这种情况下,恐怕您不能使用InheritedExport


正如我所看到的,您已经从
IgnoreJobAttribute
中的
ExportAttribute
继承了,因此,您应该能够在基类上删除
InheritedExportAttribute
,只要在您定义的每个IJob上都保留一个
IgnoreJobAttribute

可能的重复:不幸的是没有!他们至少有一些元数据,我没有。
[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; }
}