基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)

      紧接上一篇《基于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派生出一个自己的Provider

2、实现IApplicationModelConvention接口

下面就细说一下这两个类的作用,以及如何使用:

 派生自ControllerFeatureProvider的类ServiceHubControllerFeatureProvider主要是用来将我们自己定义的服务类(即Poco Controller)认定成Controller,重写其里面的核心方法就是bool IsController(TypeInfo typeInfo)。下面是实现的代码:

640?wx_fmt=other

        当我们有了ServiceHubControllerFeatureProvider这个类来把我们的服务类提供成Controller后,我们需要对我们的服务类进行路由,Filter等应用,那么这个时候IApplicationModelConvention接口的实现类ServiceHubConvention就登场了。

       ServiceHubConvention类实现IApplicationModelConvention接口的Apply方法在,在该类中就可以通过ApplicationModel 获取ControllerModel,根据ControllerMode可以获取ActionMode,进而获取ParameterModel,是不是就是我们的Mvc的那一套结构了,通过每一层结构,我们可以通过代码指定对应的路由等一系列设置(只是我们平时在写Web Api Controller是直接打上的特性而已^_^)。

640?wx_fmt=other

640?wx_fmt=other

640?wx_fmt=other

640?wx_fmt=other

       我们重写和派生出这两个将一般类转换成Asp.Net Core中的Controller类后,如何使用呢?其实很简单。通过IServiceCollection 接口获取到ApplicationPartManager类,然后在该类的FeatureProviders属性Insert派生的ServiceHubControllerFeatureProvider类实例即可;ServiceHubConvention类则只需要在配置MvcOptions时将其添加到Conventions属性即可。

640?wx_fmt=jpeg

       通过以上的扩展就可以将我们的服务类实现成Controller,就基本实现远程调用的雏形。有兴趣的朋友可以留言交流也可以加qq:418237014交流。


原文地址: https://www.jianshu.com/p/14eedf74f86a

 
 

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值