2014-03-18 99 views
1

我有許多具體實現的解決方案,每個實現都在它們自己的類庫中,這些實現都實現了我構建的四個主要接口之一。我還爲每個接口創建了一個工廠對象來動態加載請求的對象。即C#動態加載程序集

public static IDataIngestorFormat GetDataIngestionFormat(string typeName, IDataIngestor di) 
{ 
     Type format = Type.GetType(typeName); 
     object formatInstance = Activator.CreateInstance(format, di); 
     IDataIngestorFormat instance = formatInstance as IDataIngestorFormat; 
     return instance; 
} 

一切都按預期工作,直到我開始使用這些對象。我爲每個接口和具體對象都有一些單元測試項目,還有一個WCF REST服務和一個需要訪問的API層,但是在CreateInstance上會失敗,除非我將具體對象(具有Post Build Event)複製到這些客戶端項目中的每一個的輸出路徑都在相同的解決方案中。

現在對於我的問題 - 這種方法可行,但我寧願不必記得每次創建新的具體實現時都要將這些添加到所有客戶端項目中。

有沒有一種簡單的方法來實現這一點,或者我將不得不記得在每次添加新的具體實現時訪問所有客戶端項目?

+0

你不能將它們嵌入爲資源嗎? – TaW

+0

請注意,您可能重新創建了以下至少一項:[MEF](http://msdn.microsoft.com/zh-cn/library/dd460648%28v=vs.110%29.aspx)和[依賴注入框架](http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx)像Unity。考慮使用現有的庫來配置/管理運行時依賴關係。 –

+0

感謝您的反饋 - 沒有聽說過MEF,但首先看起來這看起來很有趣。不知道是否可以添加資源,但我想用這種方法我仍然需要訪問每個客戶端應用程序? –

回答

0

如果您可以使用命名約定來保證每個客戶端程序集和相關單元測試程序集的唯一名稱,那麼只需更改構建輸出路徑,以便將所有內容都構建到頂級構建目錄中。