場景
都知道在不改變原有代碼結構的情況下,想要對原有接口進行驗證或者審計等功能,基本上無非是裝飾器、代理、AOP這三種方式了,裝飾器和代理在我們的現有框架上並不是很友好,所以我推薦使用AOP。
使用特性來實現基於AOP的審計需求
傳統特性很簡單,無非是方法或者類前加上特性即可。
但是在具有業務的情況下,有很多功能的提供類需要進行實例化才可以使用,在Core環境下,大部分都可以通過依賴注入來進行獲取對象,如果能有效結合起來,那對於開發而言是相當便捷的。
.NetCore的依賴注入可以說是無處不在的,特性也可以進行依賴注入,然后在需要用到的地方進行使用,具體用法如下
首先在Startup文件中的ConfigureServices方法中進行特性的依賴注入
//注入日志記錄類 services.AddScoped<LogAttribute>();
然后使用的時候就和普通用法有所區別了
這是普通用法
[LogAttribute] public void Method(){}
如果特性的構造函數需要進行依賴注入才能獲取對象的話,用法如下
[Microsoft.AspNetCore.Mvc.ServiceFilter(typeof(LogAttribute))] public void Method(){}
果然微軟想的周全。