[Import]和_container.GetExportedValue<>()之间有什么区别?

时间:2016-05-10 13:58:52

标签: c# dependency-injection mef

使用MEF,让我们假设有一个名为FooType的类,我在其上应用[Export]属性。现在,我想在我的代码中的其他位置导入此FooType以使用它。

我尝试了这两种解决方案:

[Import]
public FooType Foo { get; set; }

private void MyMethod()
{
     Foo.DoSomething();
}

private void MyMethod()
{
    // _container is of type CompositionContainer and comes from the [ImportingConstructor]
    _container.GetExportedValue<FooType>().DoSomething();
}

这两项都有效,DoSomething() FooType方法被正确调用。所以这让我想知道:

  • 这两种解决出口的方式是否真的相似?或者有什么不同吗?
  • 两者之间是否有推荐的解决方案?

1 个答案:

答案 0 :(得分:1)

[导入]基本上会导致MEF调用GetExportedValue并将其分配给属性或字段。也就是说,大多数时候你不希望你的对象有权访问你的容器。在第二个示例中,您说您通过ImportingConstructor导入了容器本身。我通常只会通过构造函数导入FooType。我也总是喜欢构造函数注入而不是属性注入。它使对象的先决条件完全清晰,并且您的导入可以存储在只读属性中。