0
我正在調查MEF 2(Microsoft.Composition),並希望將其與我現有的代碼庫相集成。如何在MEF 2中導出工廠和/或其方法?
我目前的代碼庫有一個IFactory
接口用一個簡單的簽名:
public interface IFactory<T>
{
T Create();
}
我想註冊我的工廠,這樣,如果我在工廠做一個出口,它註冊爲Func<T>
爲工廠的輸出爲T
。因此,像這樣:
[Export]
public class Factory : IFactory<Class>
{
public Class Create() => new Class();
}
會與下面的代碼返回一個新Class
實例,併爲Create
方法的引用(作爲Func<Class>
代表):
using (var container = new ContainerConfiguration()
// ... magic missing here.
.CreateContainer())
{
var instance = container.GetExport<Class>(); // instance is created from the Factory.Create above.
var factory = container.GetExport<Func<Class>>(); // this is a reference to the Factory.Create delegate defined above.
}
我確實看到this question,但它似乎並不適用於MEF 2.現在各種事情都不一樣,但似乎更輕量化/簡化(如廣告所示!)。
是否有可能實現我期待用MEF 2做的事情?
你好@ Metro-Smurf謝謝你的回答。我意識到這個方法是你描述的而不是一個代表。我想從這個方法中創建一個委託,例如:'Func @delegate = new Func (factory.Create);'然後註冊__that__作爲導出。合理?我也意識到你的答案會讓我直接導出一個'IFactory '。但是,這不是我正在尋找的。請參閱我的問題以查看我想要的確切出口。看:魔術。 :)如果我請求一個'Class'對象,我實際上在某處調用了'factory.Create'。再次感謝! –
我可能誤解了這個問題;對於那個很抱歉。我今天晚些時候可以仔細看看,但需要考慮幾件事情:1.使用屬性導出功能,該屬性導出功能可以簡單地導出屬性返回的內容。 2.給出這樣的解釋:[用Mark Mmann解決MEF的封閉類型](http://blog.ploeh.dk/2011/03/14/ResolvingclosedtypeswithMEF/)再一次,我們對錯誤理解表示歉意。 –
不用擔心!我們都去過那裏。 :)我確實知道Seemann先生的帖子,但如果可能的話,在這裏尋找另一條路線。一些不需要我指定類型的東西。我只是想'[Export]'IFactory'和MEF「知道」如何調用它的'Create'方法並返回實例。在Unity中有一個'InjectionFactory',可以在註冊類型時使用。我正在尋找與MEF 2相似的東西。挖掘之後,我確實[找到了這個](https://github.com/MefContrib/MefContrib/blob/master/src/MefContrib/Hosting/FactoryExportProvider.cs),但它是MEF 1。 –