2015-12-21 59 views
1

我想通過能夠實例化從基類繼承的對象而不知道這些對象的類型來泛化我們的一些代碼。所以我想只能將dll放入目錄並能夠實例化這些對象。用參數初始化未知類型的最佳方法是什麼?

我正在尋找MEF,但無法導出參數,因爲它們未在代碼中定義(從數據庫加載)。所以它看起來不像MEF是要走的路。

反射效果很好,但這似乎太脆弱,不能依靠。

有什麼我錯過了,這將允許我與MEF做到這一點,是否有另一個框架,可以讓我做得更好,或者僅僅是反射這裏的答案?

+0

如果你不知道類型,你不知道它的構造函數。最後,你必須使用反思。我不懂MEF,但這不是魔術。如果你有一個只在運行時就知道的對象,反射就用在某處。 – Jonesopolis

回答

0

如果你只是會催生例如形成DLL(組裝)上,你不知道什麼可以嘗試做這樣的事情:

_binaryData = File.ReadAllBytes(_path); 
temporary = Assembly.Load(_binaryData); 

foreach (Type type in temporary.GetTypes().Where(x => typeof(IBase)).IsAssignableFrom(x)) 
    var istance = (IBase) FormatterServices.GetUninitializedObject(x) 

我不推薦將做到這一點,我建議其他的aproach ,在加載之前在該dll中存儲輔助信息,或者在您的dll的類型上使用屬性來幫助進行分析(然後加載)。

相關問題