【发布时间】:2015-03-10 17:37:31
【问题描述】:
System.Composition.Hosting.CompositionFailedException:类型 'ITranslatorMetaData' 不能用作元数据视图。元数据 视图必须是具有无参数或字典的具体类 构造函数。
我刚刚开始在 PCL 中使用 MEF(使用 nuget Microsoft.Composition)。我相信这是“轻量级”的 MEF。在我实施的课程中,我有
[Export(typeof(ITranslator))]
[ExportMetadata("Source", "Microsoft")]
[ExportMetadata("Order", "2")]
我有一个名为 ITranslatorMetaData 的接口
public interface ITranslatorMetaData
{
[DefaultValue("Unknown")]
string Source { get; }
[DefaultValue(Int32.MaxValue)]
int Order { get; }
}
最后,我尝试使用
[ImportMany]
private Lazy<ITranslator, ITranslatorMetaData>[] _translators { get; set; }
我做错了什么?看起来这应该可以工作。
更新我试过这个没有用。
[Export(typeof(ITranslator)),
ExportMetadata("Source", "Microsoft"),
ExportMetadata("Order", "2")]
Update 2 我确实发现了一个错误,Order 应该是一个 int 而不是一个字符串。但是我在指定后仍然得到同样的错误
[Export(typeof(ITranslator)),
ExportMetadata("Source", "Microsoft"),
ExportMetadata("Order", 2)]
更新 3 一个提议的解决方案建议我不应该为元数据使用接口,尽管 http://mef.codeplex.com/wikipage?title=Exports%20and%20Metadata&referringTitle=Guide 中的 MEF 示例清楚地表明使用元数据的接口,而不是具体的类。
【问题讨论】:
-
异常与该示例完全冲突:您尝试运行它吗?
-
伟大的苏格兰人你是对的!
-
永远不要完全相信一个例子而不先戳它。这不是我第一次遇到这样的问题(尽管我承认这是我第一次看到示例做了一些实际代码没有做的额外事情)