为什么我喜欢打标签来配置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获取值
原文地址:https://www.cnblogs.com/yudongdong/p/10285392.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com