2014-09-22 54 views

回答

0

您仍然需要創建容器並自行提供出口或提供目錄以確定如何查找出口。一旦提供了這些內容,將從用於獲取導出值的容器中解析導入。

所以,如果您有:

[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。基本上你只需要爲要輸出的程序集添加目錄。

+0

那麼,它會看到我用來解析「B」的容器。有趣。任何想法,如果這解決了交叉裝配? – Random 2014-09-22 22:45:06

+0

@Random,如果通過交叉裝配,你的意思是來自多個裝配,那麼,是的,如果你有一個提供多個裝配輸出的目錄。通常您可以使用DirectoryCatalog或AggregateCatalog完成此操作。 – 2014-09-23 00:05:40

+0

不幸的是,即使我無法使用它,我仍然會將其標記爲已接受的答案。我想在我的類庫中使用一個類作爲依賴注入,但是我不能在所有使用程序集中強制使用MEF ...因此重構爲單例。 – Random 2014-10-08 14:09:10