【问题标题】:In MEF, where is the container for the ImportingConstructor?在 MEF 中,ImportingConstructor 的容器在哪里?
【发布时间】:2014-09-22 22:21:01
【问题描述】:

我正在尝试在我的班级中使用 MEF ImportingConstructor,虽然我过去曾成功使用过 MEF,但我总是从创建 CompositionContainer 来组装所有导出的开始。

ImportingConstructor 使用什么容器来满足它的导入?

【问题讨论】:

    标签: c#-4.0 mef


    【解决方案1】:

    您仍然需要创建一个容器并自己提供导出或提供目录来确定如何找到导出。一旦提供了这些,导入将从用于获取导出值的容器中解析。

    如果你有:

    [Export]
    public sealed class A
    {
    }
    
    [Export]
    public sealed class B
    {
        [ImportingConstructor]
        public B(A a)
        {
        }
    }
    

    然后您调用container.GetExportedValue<B>(),它会在目录中查找 B 的导出,然后找到导入构造函数,然后尝试解析 A 的导入。假设 A 类是您可用导出的一部分(或者显式添加,或者更典型地是目录的一部分),然后它将获取 A 的导出值(可能构造它)并使用它来构造 B。

    假设您对其中的目录部分感到困惑,请查看this guide。基本上,您只需为要公开其导出的程序集添加目录。

    【讨论】:

    • 那么,它会在我用来解析“B”的同一个容器中查找。有趣的。知道这是否解决了交叉组装问题?
    • @Random,如果你所说的交叉装配是指来自多个装配,那么,是的,如果你有一个目录提供来自多个装配的出口。通常,您使用 DirectoryCatalog 或 AggregateCatalog 来完成此操作。
    • 不幸的是,即使我不能使用它,我也会继续并将其标记为已接受的答案。我想在我的类库中使用一个类作为依赖注入,但是我不能在所有使用程序集中强制使用 MEF...所以它是作为一个单例重构的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2013-03-16
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多