ABP框架学习记录(3)- 依赖注入解析
ABP的依赖注入的实现本质上是依赖于Castle依赖注入的框架。
实现途径有两种:一种实现途径是通过实现IConventionalDependencyRegistrar
的实例定义注入的约定(规则),然后通过 IocManager
来读取这个规则完成依赖注入。另一种实现途径是直接 IocManager
的 Register
方法直接完成注入。
目录结构:
代码在Abp项目文件的Dependency文件夹:
注入方式
直接注入
Abp定义 IocManager
类,以提供依赖注入的管理,内部提供 IocManager
静态字段和 IocContainer
实例字段。
IocManager
类定义了静态构造和实例构造,以确保在创建第一个实例或引用任何静态成员之前自动调用静态构造函数。
提供Register方法:
AbpModule
有个受保护的 IocManager
的成员,所以 AbpModule
的派生类都可以使用这个 IocManager
完成注册。
约定(规则)
ConventionalRegistrationConfig
:封装了一个bool属性 InstallInstallers
,用以告诉Abp底层框架是否要register相应assembly中的通过IWindsorInstaller接口指定的register规则,默认true。
IConventionalRegistrationContext
/ConventionalRegistrationContext
: 和其他上下文类起的作用类似。主要就是作为方法参数方便方法间的传递数据。这里主要封装了 Assembly
,IocManager
和 ConventionalRegistrationConfig
。
IConventionalDependencyRegistrar
:用于按约定注册依赖项。
IocManager
提供 IConventionalDependencyRegistrar
的集合,IocManager
在 RegisterAssemblyByConvention
方法中遍历这个list,并根据IConventionalDependencyRegistrar
的实例中定义的规则来完成register。
1 | private readonly List<IConventionalDependencyRegistrar> _conventionalRegistrars; |
IConventionalDependencyRegistrar
接口实现:
扩展方法
ABP提供 IocRegistrarExtensions
,IocResolverExtensions
来扩展 IIocRegistrar
,IIocResolver
接口的实现类。
IocRegistrarExtensions:
IocResolverExtensions:
IDisposableDependencyObjectWrapper<out T>
/IDisposableDependencyObjectWrapper
接口:提供释放已解析的对象的方法。
应用:
参考: