关于c#4.0:在MEF中,ImportingConstructor的容器在哪里?

In MEF, where is the container for the ImportingConstructor?

我试图在我的类中使用mef importingconstructor,虽然我过去成功地使用了mef,但我总是从创建compositioncontainer开始组装所有导出。

导入构造函数使用什么容器来满足其导入?


您仍然需要创建一个容器,并自己提供导出或提供目录来标识如何查找导出。一旦提供了这些,就可以从用于获取导出值的容器解析导入。

如果你有:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Export]
public sealed class A
{
}

[Export]
public sealed class B
{
    [ImportingConstructor]
    public B(A a)
    {
    }
}

然后调用container.GetExportedValue(),它将在目录中查找b的导出,然后找到导入构造函数,然后尝试解析a的导入。假设类a是可用导出的一部分(显式添加或更通常是目录的一部分),它将得到a(可能是构造它)的导出值a然后用它来构造b。

假设您对本指南的目录部分感到困惑,请参阅本指南。基本上,您只需要为要公开其导出的程序集添加目录。