中国城乡建设厅网站,上海网站建设上海迈歌,谷歌优化的最佳方案,软件开发外包管理紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller#xff0c;那么是否在该程序中#xff0c;服务都按照Asp.Net Core 中的Web Api的方式… 紧接上一篇《基于Asp.Net Core打造轻量级内部服务治理RPC(一)》文章。本文主要讲解基于Asp.Net Core的远程服务设计和实现。 在上一篇中讲过,服务提供者提供的服务实际上就是一个Controller那么是否在该程序中服务都按照Asp.Net Core 中的Web Api的方式建立好Controller再实现每个服务接口(调用方只需要引用对应的接口定义所在的程序集)供调用者调用呢至少我不愿意这样去设计。 在Asp.Net Core中我们可以建立Poco Controller那么我们的服务类也就完全不需要继承Controller或者以Controller结尾来命名服务(eg:UserService)。要做到这一点在Asp.Net Core中非常方便只需要扩展两个类1、从ControllerFeatureProvider派生出一个自己的Provider2、实现IApplicationModelConvention接口下面就细说一下这两个类的作用以及如何使用 派生自ControllerFeatureProvider的类ServiceHubControllerFeatureProvider主要是用来将我们自己定义的服务类(即Poco Controller)认定成Controller重写其里面的核心方法就是bool IsController(TypeInfo typeInfo)。下面是实现的代码: 当我们有了ServiceHubControllerFeatureProvider这个类来把我们的服务类提供成Controller后我们需要对我们的服务类进行路由,Filter等应用那么这个时候IApplicationModelConvention接口的实现类ServiceHubConvention就登场了。 ServiceHubConvention类实现IApplicationModelConvention接口的Apply方法在在该类中就可以通过ApplicationModel 获取ControllerModel根据ControllerMode可以获取ActionMode进而获取ParameterModel是不是就是我们的Mvc的那一套结构了,通过每一层结构我们可以通过代码指定对应的路由等一系列设置只是我们平时在写Web Api Controller是直接打上的特性而已^_^。 我们重写和派生出这两个将一般类转换成Asp.Net Core中的Controller类后如何使用呢其实很简单。通过IServiceCollection 接口获取到ApplicationPartManager类然后在该类的FeatureProviders属性Insert派生的ServiceHubControllerFeatureProvider类实例即可;ServiceHubConvention类则只需要在配置MvcOptions时将其添加到Conventions属性即可。 通过以上的扩展就可以将我们的服务类实现成Controller就基本实现远程调用的雏形。有兴趣的朋友可以留言交流也可以加qq:418237014交流。原文地址: https://www.jianshu.com/p/14eedf74f86a.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com