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(以下图二)。html

(图 一)web

 

(图 二)app

 

再看AbpBootstrapper的Initialize方法。AbpBootstrapper的Initialize()方法首先给IocManager的IocContainer(也就是IWindsorContainer, ABP使用Castle完成依赖注入) Install AbpCoreInstaller (如图三). AbpCoreInstaller来注册系统框架级的全部配置类,具体代码以下(如图四)。框架

(图 三)函数

 

除了DefaultModuleFinder其余都是单例的。AbpCoreInstaller注册的是系统框架级(核心框架,也就是指Abp项目)的全部configuration. 很容易理解ABP先完成configuration的依赖注入,由于一个功能所依赖的configuration对象通常都是要在功能被使用前完成初始化。源码分析

(图 四)spa

 

如下是AbpCoreInstaller代码在ABP源码中的位置orm

(图 五)htm

 

IocManager的IocContainer就是IWindsorContainer, ABP使用Castle完成依赖注入。对象

 

AbpBootstrapper类持有IocManager实例

 

 

AbpCoreInstaller只是完成注册系统框架级的全部配置类。Abp支持自动完成符合Conventional(基于约定)的组件的注册。 Conventional 的规则要经过继承IConventionalDependencyRegistrar接口实现。

 

以下图,ABP中继承自IConventionalDependencyRegistrar接口的四个类。 其中BasicConventionalRegistrar设置了全部继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类都会被自动注册。
其余三个则分别注册AbpDbContext,ApiController和Controller的派生类。

 

BasicConventionalRegistrar的代码,其注册全部继承至ITransientDependencyISingletonDependencyIInterceptor接口的类。

 

IIocManager是处理依赖注入的核心接口,他将具体的注册还有解析功能分别包含在其父接口IIocRegistrar和IIocResolver中。

返回ABP源码分析系列文章目录

相关文章
相关标签/搜索