之前有介紹到 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,會出現以下錯誤
參考
沒有留言:
張貼留言