使用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
方法被正确调用。所以这让我想知道:
答案 0 :(得分:1)
[导入]基本上会导致MEF调用GetExportedValue并将其分配给属性或字段。也就是说,大多数时候你不希望你的对象有权访问你的容器。在第二个示例中,您说您通过ImportingConstructor导入了容器本身。我通常只会通过构造函数导入FooType。我也总是喜欢构造函数注入而不是属性注入。它使对象的先决条件完全清晰,并且您的导入可以存储在只读属性中。