我正在构建一组控制台应用程序,它们都需要引用Web服务。我有一个类库,其中包含这些应用程序的许多共享功能,包括Web服务(已添加为服务引用)。我知道处理这个问题的“正确”方法是将块从类库的app.config复制到每个控制台应用程序,但这会导致维护问题。我还找到了使用共享app.config文件的替代方法,并从每个应用程序的配置中引用它。这样更好,但仍然不是很好 - 它仍然涉及手动配置每个新应用程序,并要求我确保共享配置文件位于所有应用程序都可以访问的位置。
我正在寻找的是三件事之一(满意度下降):
有什么建议吗?
答案 0 :(得分:3)
诚实2是微不足道的。您可以轻松地将配置文件复制到构建目录。简单的谷歌搜索可以为您提供所需的一切。
对于第1部分,您可以在此处选择,我建议您只需在界面表单中为您的服务定义API。然后使用DI通过dll插入“实现”。它始终使用Adapter Pattern完成,然后使用类似Unity的内容,用于运行时实现。
伪:
interface IMyServiceAdaptor {
void SomeMethod(params );
void SomeMethod2(params );
}
public class ServiceAdaptor : IMyServiceAdaptor{
#psudo code
ServiceProxyClient client { get;set;}
public void SomeMethod(parms){
var convertedParams = Convert(parms);
return client.SomeMethod(convertedParams );
}
...etc
}
public class MyClient {
[Dependancy]
IMyServiceAgent agent { get;set;}
public MyClient(){
#resolve
}
}
概念很简单。您有一个服务的内部表示(IMyServiceAdaptor)。重要的是它完全独立于实际调用您的服务的底层代理(服务引用)调用。我们的想法是为您的服务创建友好的界面,并与您进行交互。您始终调整服务以满足您的应用程序界面API。这将保护您免受服务端的更改,提供可用于注入的接口,以及允许您插入一些额外的逻辑来处理故障。
答案 1 :(得分:1)
在花了一些时间处理其他事情之后,我回到了这个问题,发现了一个与here相关的问题。 Trond对这个问题的回答对我来说很合适,并且比其他任何东西都简单得多。