我有一个经典的自引导问题。我试图将用于版本控制的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
我认为你所处的整体情况是一个大*接口在未来大幅度变化的情况。这就是为什么你必须针对不同的服务器使用不同的客户端... –