我有一個接口:如何使用MEF繼承導出和元數據?
[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 { ... }
然後我嘗試導入指標(我可以看到無論是在cataloge)
以下的回報是MetricA和MetricB
var metrics = compositionContainer.GetExports<IMetric>();
但是下面只返回MetricB和NOT MetricA
var metrics = compositionContainer.GetExports<IMetric, IMetricAttribute>();
有什麼想法爲什麼?
(注意MetricB重複的出口(它已經從執行IMetric))
感謝
大衛
+1有趣的問題,期待看到答案。難道不可能通過以下方法來解決這個問題:不用在IMetric上使用'InheritedExport',你只能使用'MetricAttribute',因爲你必須在派生類型上聲明它。在'MetricAttribute'中,你可以調用'base(typeof(IMetric))'。您尚未提供有關「MetricAttribute」實現的更多信息,也許您已在此處執行此操作。 –
@ba_friend - 謝謝我已經試過你的建議,雖然我不太清楚爲什麼很好地工作?我仍然有興趣瞭解爲什麼原始代碼不起作用 – GreyCloud
我也是,我想自己嘗試一下,但目前還不行。 –