2009-08-02 15 views
1

我已經實現了一個'插件'系統,我的應用程序創建了一些類,這些類在運行時實現接口以允許可插入的功能。使用Activator最好的方式來創建具有多個構造函數的類的實例?

我通過在插件程序集中實現指定接口的所有類上使用Activator.CreateInstance來實現此目的。

在我只使用一個實現類的當前時間,併爲它我有兩個構造函數的參數,幷包括那些在Activator.CreateInstance電話:

instanceList.Add((Foo)Activator.CreateInstance(_TypeList[typeKey], new object[] { arg1, arg2 })); 

我意識到這可能會導致稍後如果添加了不使用此構造函數簽名的實現,則會出現問題。處理這個問題的最佳情況是什麼?

通過文檔明確地說,構造函數需要使用這個簽名,然後將它包圍在try/catch中?

或者有沒有辦法來調用類的構造函數?記住我必須以某種方式匹配構造函數參數。

或...通過將參數放入靜態類作爲靜態propertys避免構造函數參數?

回答

1

首先,我會重構代碼來抽象構造說工廠類。然後,工廠使用的策略可以決定最佳方式(如果不同)以及在發生錯誤時應採取的措施 - 如缺少構造函數。您可以根據需要使用泛型來強制或鬆散地輸入接口。

雖然我會堅持使用Activator。我們已經完成了很多這類構造的工作,並且它爲我們購買了很多東西,包括基於運行時發現的類型的後期綁定,單例,類型別名,自定義安全等。

1

我會要求所有插件,有一個沒有參數的構造函數,併爲接口添加一個初始化方法,並帶有一些通用參數。

無法知道插件需要的所有可能實現的參數。

相關問題