Как использовать MEF Inherited Export & Метаданные?

У меня есть интерфейс:

[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))

спасибо

Дэвид

15
задан GreyCloud 5 July 2011 в 09:46
поделиться