我有一個經典的自引導問題。我試圖將用於版本控制的TFS客戶端庫注入到我的應用程序中,但我需要在不同情況下加載不同版本的客戶端庫:TFS 2013客戶端庫無法連接到TFS 2005或TFS 2008服務器,因此我需要在連接到這些舊版本的TFS時加載較早版本的客戶端庫。我發現我可以通過請求IBuildServer
服務的BuildServerVersion
屬性來可靠地確定我正在連接的TFS的版本。如何在決定使用哪個依賴項時注入依賴關係需要使用依賴關係
通常我會使用抽象工廠模式解決這個問題,並使用IoC容器來加載相應的工廠實現;然而,通常這個決定完全是應用程序的責任。在我的情況下,這個決定是基於TFS服務器的響應,而且最重要的是,我必須加載TFS客戶端庫的版本,以便首先從TFS服務器請求這些信息。
我可以考慮哪些方法來解決這個問題?
可以調用BuildServerVersion而不需要TFS庫嗎?如果是的話,圍繞這一個調用創建一個小包裝 –
是的,但是:「Microsoft不提供直接與Web服務對話的支持,這些接口在將來可能會發生劇烈變化」(引用[來自MS員工的這個答案] (http://stackoverflow.com/a/9134693/5296))。 – alastairs
我認爲你所處的整體情況是一個大*接口在未來大幅度變化的情況。這就是爲什麼你必須針對不同的服務器使用不同的客戶端... –