ABP源码分析二:ABP中配置的注册和初始化
一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法。执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成了。 ABP开始的地方就是HttpApplication的构造函数。 如下图一,Abp定义了一个继承自HttpApplication的类AbpApplication。该类的构造函数里会创建AbpBootstrapper实例,然后再Application_Start方法中调用AbpBootstrapper的Initialize方法(稍后解释)。 在Abp的实际web项目中Global.asax中定义的HttpApplication派生类必须继承自AbpWebApplication(如下图二)。
(图 一)
(图 二)
再看AbpBootstrapper的Initialize方法。AbpBootstrapper的Initialize()方法首先给IocManager的IocContainer(也就是IWindsorContainer, ABP使用Castle完成依赖注入) Install AbpCoreInstaller (如图三). AbpCoreInstaller来注册系统框架级的所有配置类,具体代码如下(如图四)。
(图 三)
除了DefaultModuleFinder其他都是单例的。AbpCoreInstaller注册的是系统框架级(核心框架,也就是指Abp项目)的所有configuration. 很容易理解ABP先完成configuration的依赖注入,因为一个功能所依赖的configuration对象一般都是要在功能被使用前完成初始化。
(图 四)
以下是AbpCoreInstaller代码在ABP源码中的位置。
(图 五)
IocManager的IocContainer就是IWindsorContainer, ABP使用Castle完成依赖注入。
AbpBootstrapper类持有IocManager实例
AbpCoreInstaller只是完成注册系统框架级的所有配置类。Abp支持自动完成符合Conventional(基于约定)的组件的注册。 Conventional 的规则要通过继承IConventionalDependencyRegistrar接口实现。
如下图,ABP中继承自IConventionalDependencyRegistrar接口的四个类。 其中BasicConventionalRegistrar设置了所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类都会被自动注册。
其他三个则分别注册AbpDbContext,ApiController和Controller的派生类。
BasicConventionalRegistrar的代码,其注册所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类。
IIocManager是处理依赖注入的核心接口,他将具体的注册还有解析功能分别包含在其父接口IIocRegistrar和IIocResolver中。
相关文章
- anaconda pycharm设置编译器_anaconda pycharm环境配置
- SpringCloud笔记:配置Eurake注册中心与高可用集群
- creo每次都要配置config_config配置中心
- 【零开始搭建SpringCloud Alibaba】搭建配置中心及注册中心nacos(Server端)
- Spring Cloud Alibaba 2.2.6发布:新增Nacos注册快速失败的配置
- 在Postman中配置Token
- spring mongodb的常规配置详解编程语言
- Oracle 参数 SORT_AREA_SIZE 官方解释,作用,如何配置最优化建议
- https原理及tomcat配置https方法详解编程语言
- 配置 Debian Stretch 的安装源
- Linux 图形化配置网络的步骤(linux 图形配置网络)
- MySQL配置简单到持续集成(ci mysql 配置)
- 构建最小Redis集群,实现高可用稳定性(redis集群最小配置)