【问题标题】:How do i get MEF container to inject himself我如何让 MEF 容器自己注射
【发布时间】:2013-11-26 10:12:40
【问题描述】:

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

【问题讨论】:

  • 通过这样做,您实际上是从依赖注入转向service locator pattern。这可能会对您的应用程序的可维护性产生不利影响。

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


【解决方案1】:

您可以使用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 表示“据我所知,将容器注入部件不是 MEF 的“正常”用例”。这对于任何 IoC 容器都是一个危险信号。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多