无法通过MEF获取对象

时间:2011-10-20 15:35:44

标签: c# silverlight prism mef

我有三个装配

  • AssemblyX包含Interface IContext
  • AssemblyY包含实现IContext的类Context
  • AssemblyZ是使用Context的客户端,应将其注册到MEF,IContext可以从其他类(在其他程序集中)使用

现在我的问题是在MEF中注册Context,其他实例可以使用IContext来获取它。

我已将属性[Export(typeof(IContext))]附加到Context。但是当我现在this.Container.GetExportedValue<IContext>()时,我得到了一个ImportCardinalityMismatchException。

Context的构造函数定义如下

    [ImportingConstructor]
    public Context(IEventAggregator eventAggregator) { ... }

当我this.Container.GetExportedValue<IEventAggregator>()进行测试以解析IEventAggregator时,这是有效的。

有人可以帮助我吗,我做错了什么? - 我是否必须在AssemblyX和/或AssemblyY的某处附加?

感谢。 托马斯

2 个答案:

答案 0 :(得分:3)

要解析IContext(作为来自assemblyY的Context),Container必须知道AssemblyY(即,关于它的所有可组合部分)。为此,您应该使用适当的目录。或者,如果按需加载AssemblyY,则应在使用Context之前加载它。

答案 1 :(得分:0)

目录MEF中的所有三个组件都在使用吗?

如果这不是问题,请查看How to Debug and Diagnose MEF failures上的博文。