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; }
}