如何避免使用第三方网络服务的代码重复-不使用动态?我正在使用第三方Web服务,其中所有方法都具有以下签名:SomeResponseClassSomeMethod(SomeRequestClassrequest)每个方法都有自己的请求类和响应类。但是,所有请求都有一些共同点,所有响应也有一些共同点。每个请求类都有一些用于标识的属性:username和token,每个响应类都有一些属性来指示是否有错误:status和error。我正在寻找一种优雅的方法来创建一个实例化我的请求的方法-这样我就不必在调用服务的每个方法中重复自己。由于我无法更改类并且所有类都没有通用接口或基类,因此我找到的唯一解决方案是使用dynamic:privateTCreateRequest()whereT:new(){if(string.IsNullOrEmpty(_Token)){登录();}//这必须是动态的,接下来的2行才能通过编译。动态请求=newT();request.username=_UserName;request.token=_Token;返回(T)请求;服务响应填充我自己的实体://响应必须是动态的才能获取错误和状态属性privatestaticTCreateServiceResponse(dynamicresponse)其中T:ServiceResponse,new(){Tresult=newT();结果.Error=(响应==null)?“服务响应为空”:response.error;结果.Status=(响应==null)?-1:响应.status;返回结果;(此方法用于我的服务响应中的数据用于实体的每个方法(均派生自ServiceResponse)。)有没有办法在不使用动态的情况下执行此类操作?对我来说,这有点像使用肮脏的hack...如果我能以某种方式“注入”一个所有请求实现的通用接口和一个实现所有响应的通用接口,我可以使用简单的泛型,但我想这是不可能的,或者是它?当您使用由visualstudio创建的服务引用时,所有生成的类都被标记为部分的。这意味着您可以使用自己的代码扩展它们。在您的情况下,这将是一个提供重复属性的接口。您可以将此接口用作通用约束。首先创建公共接口。为了使事情更简单,您可以使用与服务引用中定义的公共属性相同的名称和类型:interfaceIRequest{stringusername{get;放;}字符串标记{得到;放;然后你可以创建一个代码文件,并在与服务引用相同的命名空间中为每个服务请求类(具有相同的名称)定义一个分部类。每个类都实现你的接口:partialclassSomeRequestClass:IRequest{}选择相同的属性名称和类型后,你不必专门实现接口。最后,你使用泛型约束:以上是C#学习教程:Howtoavoidduplicatingcodewiththird-partywebservices-withoutusingdynamic?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注—privateTCreateRequest()whereT:IRequest,new(){if(string.IsNullOrEmpty(_Token)){登录();}T请求=新T();request.username=_UserName;request.token=_Token;退货申请;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
