基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)
? ? ? 緊接上一篇《基于Asp.Net Core打造輕量級(jí)內(nèi)部服務(wù)治理RPC(一)》文章。本文主要講解基于Asp.Net Core的遠(yuǎn)程服務(wù)設(shè)計(jì)和實(shí)現(xiàn)。
? ? ? ?在上一篇中講過(guò),服務(wù)提供者提供的服務(wù)實(shí)際上就是一個(gè)Controller,那么是否在該程序中,服務(wù)都按照Asp.Net Core 中的Web Api的方式建立好Controller,再實(shí)現(xiàn)每個(gè)服務(wù)接口(調(diào)用方只需要引用對(duì)應(yīng)的接口定義所在的程序集)供調(diào)用者調(diào)用呢?至少我不愿意這樣去設(shè)計(jì)。
? ? ? 在Asp.Net Core中,我們可以建立Poco Controller,那么我們的服務(wù)類也就完全不需要繼承Controller或者以Controller結(jié)尾來(lái)命名服務(wù)(eg:UserService)。要做到這一點(diǎn),在Asp.Net Core中非常方便,只需要擴(kuò)展兩個(gè)類:
1、從ControllerFeatureProvider派生出一個(gè)自己的Provider
2、實(shí)現(xiàn)IApplicationModelConvention接口
下面就細(xì)說(shuō)一下這兩個(gè)類的作用,以及如何使用:
?派生自ControllerFeatureProvider的類ServiceHubControllerFeatureProvider主要是用來(lái)將我們自己定義的服務(wù)類(即Poco Controller)認(rèn)定成Controller,重寫(xiě)其里面的核心方法就是bool IsController(TypeInfo typeInfo)。下面是實(shí)現(xiàn)的代碼:
? ? ? ? 當(dāng)我們有了ServiceHubControllerFeatureProvider這個(gè)類來(lái)把我們的服務(wù)類提供成Controller后,我們需要對(duì)我們的服務(wù)類進(jìn)行路由,Filter等應(yīng)用,那么這個(gè)時(shí)候IApplicationModelConvention接口的實(shí)現(xiàn)類ServiceHubConvention就登場(chǎng)了。
? ? ? ?ServiceHubConvention類實(shí)現(xiàn)IApplicationModelConvention接口的Apply方法在,在該類中就可以通過(guò)ApplicationModel 獲取ControllerModel,根據(jù)ControllerMode可以獲取ActionMode,進(jìn)而獲取ParameterModel,是不是就是我們的Mvc的那一套結(jié)構(gòu)了,通過(guò)每一層結(jié)構(gòu),我們可以通過(guò)代碼指定對(duì)應(yīng)的路由等一系列設(shè)置(只是我們平時(shí)在寫(xiě)Web Api Controller是直接打上的特性而已^_^)。
? ? ? ?我們重寫(xiě)和派生出這兩個(gè)將一般類轉(zhuǎn)換成Asp.Net Core中的Controller類后,如何使用呢?其實(shí)很簡(jiǎn)單。通過(guò)IServiceCollection 接口獲取到ApplicationPartManager類,然后在該類的FeatureProviders屬性Insert派生的ServiceHubControllerFeatureProvider類實(shí)例即可;ServiceHubConvention類則只需要在配置MvcOptions時(shí)將其添加到Conventions屬性即可。
? ? ? ?通過(guò)以上的擴(kuò)展就可以將我們的服務(wù)類實(shí)現(xiàn)成Controller,就基本實(shí)現(xiàn)遠(yuǎn)程調(diào)用的雛形。有興趣的朋友可以留言交流也可以加qq:418237014交流。
原文地址: https://www.jianshu.com/p/14eedf74f86a
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: dnSpy 强大的.Net反编译软件
- 下一篇: Surging1.0发布在即,.NET开