为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java

       紧接上一篇《基于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)。下面是实现的代码:

webp

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

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

webp

webp

webp

webp

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

webp



作者:_科长_
链接:https://www.jianshu.com/p/14eedf74f86a


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
233
获赞与收藏
1008

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消