1

我正在将构造函数注入与 MEF 组合容器一起使用,我想知道如何使组合容器将自身注入到他提供的对象的实例上。

4

2 回答 2

2

您可以使用CompositionContainer.ComposeExportedValue方法之一从给定对象创建部件。

这是一个示例:

class Program
{
    static void Main(string[] args)
    {
        var container = new CompositionContainer(new ApplicationCatalog());
        Console.WriteLine("Main: container [{0}]", container.GetHashCode());

        container.ComposeExportedValue<CompositionContainer>(container);

        var exp = container.GetExportedValue<ExportThatNeedsContainer>();

        Console.ReadKey();
    }
}

[Export]
public class ExportThatNeedsContainer
{
    [ImportingConstructor]
    public ExportThatNeedsContainer(CompositionContainer cc)
    {
        Console.WriteLine("ExportThatNeedsContainer: cc [{0}]", cc.GetHashCode());
    }
}

这可行,但是据我所知,将容器注入部件并不是 MEF 的“正常”用例。

于 2013-11-14T10:33:00.720 回答
0

我不确定它是否可以工作。假设您有一个包含三个类的容器,其中一个还包含容器本身,其中包含三个类。这将是一个堆栈溢出 :)

于 2013-11-20T09:29:42.733 回答