基于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)。下面是實現的代碼:
? ? ? ? 當我們有了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
總結
以上是生活随笔為你收集整理的基于Asp.Net Core打造轻量级内部服务治理RPC(二 远程服务设计)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnSpy 强大的.Net反编译软件
- 下一篇: Surging1.0发布在即,.NET开