2016-05-10 35 views
0

使用MEF,我們假設有一個叫做FooType的類,我在其上應用了[Export]屬性。現在,我想在我的代碼中的其他位置導入此FooType以使用它。[Import]和_container.GetExportedValue <>()之間的任何差異?

我已經嘗試了這兩種解決方案:

[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(); 
} 

這兩項工作的FooTypeDoSomething()方法正確調用。所以這讓我想知道:

  • 這兩種解決出口的方式真的很相似嗎?或者有什麼區別?
  • 兩者之間有推薦的解決方案嗎?

回答

1

[Import]主要導致MEF調用GetExportedValue並將其分配給屬性或字段。也就是說,大多數時候你不想讓你的對象訪問你的容器。在你的第二個例子中,你說過你通過ImportingConstructor導入了容器本身。我通常只會通過構造函數導入FooType。我也總是喜歡構造函數注入,而不是屬性注入。它使對象的先決條件完全清晰,並且您的導入可以存儲在只讀屬性中。

相關問題