【发布时间】:2011-07-04 11:37:16
【问题描述】:
我有一个界面:
[InheritedExport(typeof(IMetric))]
public interface IMetric { ... }
我有一个 Meta 属性接口:
public interface IMetricAttribute { ... }
以及实现它的属性:
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class MetricAttribute : ExportAttribute, IMetricAttribute {
public string MetricName { get; set; }
public string MetricDescription { get; set; }
public MetricAttribute(string name, string description)
: base(typeof(MetricAttribute)) {
this.MetricName = name;
this.MetricDescription = description;
}
}
然后我有两个类:
[Metric("MetricA","MetricA")]
public class MetricA: IMetric { ... }
[Export(typeof(IMetric))] <<<< THIS IS IMPORTANT
[Metric("MetricB", "MetricB")]
public class MetricB: IMetric { ... }
然后我尝试导入指标(我可以在目录中看到两者)
以下返回是 MetricA AND MetricB
var metrics = compositionContainer.GetExports<IMetric>();
但是,以下仅返回 MetricB 而不是 MetricA
var metrics = compositionContainer.GetExports<IMetric, IMetricAttribute>();
知道为什么吗?
(注意 MetricB 上的重复导出(它已经从实施 IMetric 中得到))
谢谢
大卫
【问题讨论】:
-
+1 有趣的问题,期待看到答案。是否可以通过以下方法解决此问题:而不是在
IMetric上使用InheritedExport,您只能使用MetricAttribute,因为无论如何您都必须在派生类型上声明它。在MetricAttributector,您可以致电base(typeof(IMetric))。您还没有提供有关MetricAttribute实现的更多信息,也许您已经在那里这样做了。 -
@ba_friend - 谢谢我已经尝试了你的建议,虽然我不太清楚为什么?我仍然有兴趣找出为什么原始代码不起作用
-
我也是,我想自己尝试,但目前不可能。