У меня есть интерфейс:
[InheritedExport(typeof(IMetric))]
public interface IMetric { ... }
У меня есть интерфейс мета-атрибутов:
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 И MetricB
var metrics = compositionContainer.GetExports<IMetric>();
Однако следующее возвращает ТОЛЬКО MetricB, а НЕ MetricA
var metrics = compositionContainer.GetExports<IMetric, IMetricAttribute>();
есть идеи, почему?
(обратите внимание на дублированный экспорт в MetricB (он уже есть от реализации IMetric))
спасибо
Дэвид