2021年4月5日 星期一

ASP.NET Core 3.1 Filters :掛載 Attribute

之前有介紹到 asp.net core 如何使用 filters,那時是使用 Global 方式加入,這次

說明可掛載到方法上的加入方式,還是有一點點的地方需要注意。


在開始介紹前,可以先針對相關Filters 掛載方式有個印象

  • TypeFilter:內建工廠機制實例化(亦可自己實作),不需DI容器註冊

  • ServiceFilter:透過DI容器實例化,故需要DI容器註冊



設計一個 ActionFilter,MyActionFilterAttribute 實作 IAsyncActionFilter 介面,

而 OnActionExecution 內容中,印出 executing 與executed 


client 應用,直接掛載到 action 上,這邊示範使用 「TypeFilter」 方式


檢視輸出,如同預期的文字


調整使用「ServiceFilter」掛載


此時 Startup.cs 需要註冊 filter


就會運作正常


若宣告 ServiceFilter 但是沒有使用DI註冊的話,會出現以下錯誤



實務上,兩者中較常使用的為 ServiceFilter ,因大部分需要處理的邏輯,尚需要透過

其他物件一起完成,例如 Log 等等


接下來試著注入一些東西,先調整 MyActionFilterAttribute 類別,建構式注入 ILog


Startup.cs 需新增註冊 ILog


由輸出來看,確實是先進入建構式


若沒有先在 Startup.cs 註冊 ILog,會出現以下錯誤



參考

沒有留言:

張貼留言