gpt4 book ai didi

c# - 封装服务引用

转载 作者:行者123 更新时间:2023-11-30 21:14:51 25 4
gpt4 key购买 nike

我正在构建一组控制台应用程序,它们都需要引用网络服务。我有一个类库,其中包含这些应用程序的大部分共享功能,包括 Web 服务(已作为服务引用添加)。我知道处理此问题的“正确”方法是将 block 从类库的 app.config 复制到每个控制台应用程序,但这会导致维护问题。我还找到了使用共享 app.config 文件的替代方法,并从每个应用程序的配置中引用它。这更好,但仍然不是很好 - 它仍然涉及手动配置每个新应用程序,并且需要我确保共享配置文件位于所有应用程序都可以访问的位置。

我正在寻找的是以下三件事之一(按满意度从高到低的顺序):

  1. 一种将整个服务以及访问它所需的一切封装到从类库生成的 dll 中的方法。
  2. 一种将相关配置信息自动复制到每个控制台应用程序的构建目录(例如构建后脚本)的方法。
  3. 解释为什么前两个都不可行。 (在这种情况下,我将使用共享配置)

有什么建议吗?

最佳答案

诚实 2 是微不足道的。您可以轻松地将配置文件复制到构建目录。一个简单的谷歌搜索可以为您提供所需的一切。

对于第 1 部分,您可以在此处进行选择,我建议您以接口(interface)形式简单地为您的服务定义 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)。重要的是它完全独立于实际调用您的服务的底层代理(服务引用)调用。这个想法是为您的服务创建一个友好的界面,然后与之交互。您总是调整服务以满足您的应用程序接口(interface) API。这将使您免受服务端更改的影响,提供可用于注入(inject)的接口(interface),并允许您插入一些额外的逻辑来处理故障。

关于c# - 封装服务引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com