為什麼我喜歡打標簽來配置AOP
1. 配置多很混亂,程式碼裡面很難分辨出來哪些是AOP容器(比如屬性註入)
2. 對於程式碼生成器生成的程式碼裡面還需要手動加到配置裡面
3. 連java spring現在都是清一色的註解來代替xml,這個就是趨勢所在
我基於Autofac開發了一個基於標簽來配置AOP的擴充套件
NUGET :Install-Package Autofac.Annotation
開源地址:
https://github.com/yuzd/Autofac.Annotation
幫忙點個star 謝謝!
特色
1.打個Bean標簽就能註入到AOP
2.打個Autowired標簽自動裝配註入
3.打個Value標簽自動註入配置值(Soure標簽配合使用)具體使用方法看下麵的例子
4.支援攔截器
5.更多等你發現
如何使用
AutofacAnnotationModule有兩種構造方法
- 可以傳一個Assebly串列 (這種方式會註冊傳入的Assebly裡面打了標簽的類)
- 可以傳一個AsseblyName串列 (這種方式是先會根據AsseblyName查詢Assebly 然後在註冊)
支援的標簽說明
Bean標簽
說明:只能打在class上面 把某個類註冊到autofac容器 例如:
1.無構造方法的方式 等同於 builder.RegisterType();
2.指定Scope [需要指定AutofacScope屬性 如果不指定為則預設為AutofacScope.InstancePerDependency]
3.指定型別註冊 等同於 builder.RegisterType().As()
4.指定名字註冊 等同於 builder.RegisterType().Keyed(“a4”)
5.其他屬性說明
- InjectProperties 是否預設裝配屬性 【預設為true】
- InjectPropertyType 屬性自動裝配的型別
-
-
- Autowired 【預設值】代表打了Autowired標簽的才會自動裝配
- ALL 代表會裝配所有 等同於 builder.RegisterType().PropertiesAutowired()
- AutoActivate 【預設為false】 如果為true代表autofac build完成後會自動建立 具體請參考 autofac官方檔案
- Ownership 【預設為空】 具體請參考 autofac官方檔案
- Interceptor 【預設為空】指定攔截器的Type
- InterceptorType 攔截器型別 攔截器必須實現 Castle.DynamicProxy的 IInterceptor 介面, 有以下兩種
-
- Interface 【預設值】代表是介面型
- Class 代表是class型別 這種的話是需要將要攔截的方法標virtual
- InterceptorKey 如果同一個型別的攔截器有多個 可以指定Key
- InitMethod 當實體被建立後執行的方法名稱 類似Spring的init-method 可以是有引數(只能1個引數型別是IComponentContext)和無引數的方法
- DestroyMetnod 當實體被Release時執行的方法 類似Spring的destroy-method 必須是無引數的方法
-
Autowired 自動裝配
可以打在Field Property 構造方法的Parameter上面 其中Field 和 Property 支援在父類
Value 和 PropertySource
PropertySource類似Spring裡面的PropertySource 可以指定資料源 支援 xml json格式 支援內嵌資源
1.json格式的檔案
2. xml格式的檔案
3.不指定PropertySource的話會預設從工程目錄的 appsettings.json獲取值