C# 我如何让MEF容器自己注射

C# 我如何让MEF容器自己注射,c#,dependency-injection,inversion-of-control,mef,ioc-container,C#,Dependency Injection,Inversion Of Control,Mef,Ioc Container,我正在对MEF Composition Container使用构造函数注入,我想知道如何使CompositionContainer在他提供的对象实例上注入自身。您可以使用其中一种方法从给定对象创建零件 以下是一个示例: class Program { static void Main(string[] args) { var container = new CompositionContainer(new ApplicationCatalog());

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

您可以使用其中一种方法从给定对象创建零件

以下是一个示例:

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());
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var container=newcompositioncontainer(newapplicationcatalog());
WriteLine(“Main:container[{0}]”,container.GetHashCode());
ComposeExportedValue(容器);
var exp=container.GetExportedValue();
Console.ReadKey();
}
}
[出口]
需要容器的公共类导出
{
[导入构造函数]
需要容器的公共出口(合成容器cc)
{
WriteLine(“ExportThatNeedsContainer:cc[{0}]”,cc.GetHashCode();
}
}

但是,就我所知,将容器注射到零件上是可行的,这不是MEF的“正常”用例。

我不确定它是否可行。假设您有一个包含三个类的容器,其中一个还包含容器本身,其中包含三个类。这将是一个stackoverflow:)

+1,因为“据我所知,将容器注射到零件上不是MEF的“正常”用例”。这对于任何IoC容器来说都是一个危险信号。通过这样做,您基本上已经从依赖注入转向了应用程序。这可能会对应用程序的可维护性产生不利影响。