我刚在我的mef应用程序中追查到一个问题;问题是,我在IEnumerable<IFoo>
属性中有[Import]
而不是[ImportMany]
。我开始想知道为什么。 MEF认为注入目标是一个“集合”,可以确定需要集合而不是单个元素。至少Ninject以这种方式工作。为什么MEF有[ImportMany]而不只是[Import]
有没有人知道为什么[ImportMany]
是必需的?我能想到的唯一原因是人们可能想要[Export(typeof(IEnumerable<IBar>)] public IEnumerable<Bar> { get; }
,但这真的是这种设计的原因吗?我敢打赌,我不是唯一一个调试过这种错误的人。
感谢您的澄清。在我的情况下,恼人的是'compositionContainer.ComposeParts(this);'没有抛出异常,而是我的ImportMany导入是其中一个依赖关系。只有提示是关于拒绝导出的日志输出。这当然是由设计,幸运的是我找到了mefx工具来诊断问题。如果对象图很大,这种错误可能很难追踪。 – Ahe 2011-12-21 12:19:00