我個(gè)人比較懶,能自動(dòng)做的事絕不手動(dòng)做,最近在用ASP.NET Core寫一個(gè)項(xiàng)目,過(guò)程中會(huì)積累一些方便的工具類或框架,分享出來(lái)歡迎大家點(diǎn)評(píng)。

如果以后有時(shí)間的話,我打算寫一個(gè)系列的【實(shí)現(xiàn)BUG自動(dòng)檢測(cè)】,本文將是第一篇。


如果你使用過(guò)ASP.NET Core那么對(duì)依賴注入一定不陌生。
使用流程為:
1. 先注冊(cè)Service,有3個(gè)方法AddTransient、AddScoped、AddSingleton
2. 再使用Service,通常在構(gòu)造方法里聲明

 

先來(lái)說(shuō)說(shuō)產(chǎn)生BUG的場(chǎng)景
BUG場(chǎng)景一:
有的時(shí)候可能因?yàn)槭韬鐾涀?cè)Service直接就使用了,使用那個(gè)Service時(shí)會(huì)報(bào)異常。這種情況項(xiàng)目都是可以編譯通過(guò)的,是一個(gè)不太容易發(fā)現(xiàn)的BUG,如果那個(gè)Service在測(cè)試時(shí)沒(méi)有覆蓋到這個(gè)BUG就會(huì)被帶到生產(chǎn)環(huán)境

BUG場(chǎng)景二:
通常有一些Service我們只希望它在請(qǐng)求作用域內(nèi)被使用,例如:在服務(wù)端持有數(shù)據(jù)庫(kù)連接的Service通常都是請(qǐng)求作用域級(jí)別的,即:在請(qǐng)求內(nèi)第一次使用數(shù)據(jù)庫(kù)時(shí)創(chuàng)建數(shù)據(jù)庫(kù)連接,請(qǐng)求內(nèi)會(huì)復(fù)用連接,請(qǐng)求結(jié)束回收連接。
對(duì)應(yīng)ASP.NET Core里的注冊(cè)方式如下:
services.AddScoped<IDbContext, DbContext>();

在ASP.NET Core中AddScoped注冊(cè)的Service在請(qǐng)求結(jié)束時(shí)會(huì)銷毀。
如果你在控制器中直接引用IDbContext一切正常,現(xiàn)在業(yè)務(wù)需要我們要封裝一個(gè)用戶管理類UserManager,它是單例的,注冊(cè)代碼:
services.AddScoped<IUserManager, UserManager>();

在寫UserManager類的時(shí)候要訪問(wèn)數(shù)據(jù)庫(kù),順手就引用了IDbContext(正常是不應(yīng)該這么引用的但是忘記