我如何让MEF容器注入自己

时间:2013-11-13 17:10:49

标签: c# dependency-injection inversion-of-control mef ioc-container

我正在使用MEF Composition Container的构造函数注入,我想知道如何让CompositionContainer将自己注入到他提供的对象的实例上。

2 个答案:

答案 0 :(得分: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的“正常”用例。

答案 1 :(得分:0)

我不确定它是否可行。想象一下,你有一个包含三个类的容器,其中一个也包含容器本身,它包含三个类。它将是一个stackoverflow:)