net core Webapi基礎(chǔ)工程搭建(七)——小試AOP及常規(guī)測試_Part 2

前言

前一篇講到了中間層的使用,可能不是那么AOP,今天主要來說下一個(gè)輕量級(jí)的AOP第三方類庫AspectoCore。

簡單介紹下這個(gè)類庫,AspectCore Project 是適用于 net core 平臺(tái)的輕量級(jí) Aop(Aspect-oriented programming) 解決方案,它更好的遵循 net core 的模塊化開發(fā)理念,使用AspectCore可以更容易構(gòu)建低耦合、易擴(kuò)展的Web應(yīng)用程序。

引入

首先,我們?cè)赨til層直接引入相關(guān)的類庫。


引入

然后我們還是先在Startup注冊(cè)下,將ConfigureServices方法從void更改為IServiceProvider,目的就是,這個(gè)管道給別人了,不再由默認(rèn)的來了。

    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        //...之前的
        services.AddAspectCoreContainer();
        return services.BuildAspectInjectorProvider();
    }

自定義屬性

寫完之后,我們就可以來試試這個(gè)玩意兒怎么玩了,不多說,Util來個(gè)文件夾Attributes,然后新建一個(gè)類AprilLogAttribute,繼承AbstractInterceptorAttribute

    public class AprilLogAttribute : AbstractInterceptorAttribute
    {
        public async override Task Invoke(AspectContext context, AspectDelegate next)
        {
            LogUtil.Debug("AprilLogAttribute begin");
            await next(context);
            LogUtil.Debug("AprilLogAttribute end");
        }
    }

沒啥具體的使用注解,就是加個(gè)前后注釋的作用。然后我們?cè)谥暗腟tudent這個(gè)接口中加上一個(gè)測試方法。

    public interface IStudentService : IBaseService<StudentEntity>
    {
        [AprilLog]
        void Test();
    }

StudentService我們來實(shí)現(xiàn)這個(gè)方法。

    public class StudentService : BaseService<StudentEntity>, IStudentService
    {
        public void Test()
        {
            LogUtil.Debug("StudentService Test");
        }
    }

測試

全部搞定之后,我們繼續(xù)Values開刀,注釋掉之前的代碼之后,只留一個(gè)Test方法。

        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            _service.Test();
            return new string[] { "value1", "value2" };
        }

別忘了運(yùn)行前在application.json里面加上接口白名單。

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "CommonSettings": {
    "FilePath": "/uploads/files/"
  },
  "DefaultSqlConnectionString": {
    "MySql": "server=127.0.0.1;userid=root;password=root;database=test;"
  },
  "AllowUrl": "/api/Values" //這個(gè)如果沒有那一直是返回未登錄
}
測試

運(yùn)行沒問題,我們來看下日志記錄。


日志

另外也補(bǔ)充下這個(gè)記錄的問題,如果需要監(jiān)視接口調(diào)用的情況,我們可以加上斷點(diǎn)看下這個(gè)context,這個(gè)對(duì)象里面本身已經(jīng)包含了我們調(diào)用了哪個(gè)接口的哪個(gè)方法等等信息,這里只舉個(gè)簡單的例子,我們可以知道我們調(diào)用的接口及方法,包括實(shí)現(xiàn)及方法,然后可以記錄下是誰訪問,哪個(gè)接口,執(zhí)行時(shí)間等等。


示例

小結(jié)

寫到這里,net core webapi的基礎(chǔ)工程基本上已經(jīng)完工了,通過這些記錄我本身又對(duì)之前的工程進(jìn)行了小量的改動(dòng),每次的一版寫完都有一個(gè)新的感受,可能當(dāng)時(shí)寫一版的時(shí)候沒有想太多,一遍一遍的過完之后發(fā)現(xiàn)有些地方可以優(yōu)化,并且優(yōu)化的效果也是挺明顯,后續(xù)如果有新的功能實(shí)現(xiàn)或者業(yè)務(wù)需要的時(shí)候,也會(huì)同步更新的這個(gè)示例工程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容