2011-10-02 38 views
1

如何在MEF容器中導出零件的現有實例。如果我有在容器中組成的類A,我需要在代碼的某些地方獲取實例,如果我調用GetExortedValue(),那麼如果類A使用CreationPolicy.NonShared簽名,那麼它將再次實例化並且我需要現在的一個。從MEF容器獲取導出的零件實例

在此先感謝...

回答

2

顯然呼喚你的容器上GetExportedValue<T>可能導致對T一個新實例的產生(取決於所使用的部分CreationPolicy),但有一個選項調用GetExport<T>它會返回一個Lazy<T>實例。這是生成並只產生一次奇異部分:

var part = container.GetExport<IMyInterface>(); 

在上面的例子中,part將是Lazy<IMyInterface>一個實例,因此當你第一次訪問part.Value,在Lazy<IMyInterface>電話綁定回委託容器創建並組成IMyInterface實例並返回。隨後對part.Value的調用將始終返回相同的實例。