C# 我如何让MEF容器自己注射
我正在对MEF Composition Container使用构造函数注入,我想知道如何使CompositionContainer在他提供的对象实例上注入自身。您可以使用其中一种方法从给定对象创建零件 以下是一个示例: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());
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容器来说都是一个危险信号。通过这样做,您基本上已经从依赖注入转向了应用程序。这可能会对应用程序的可维护性产生不利影响。