您的位置:首页 > 其它

ABP源码分析二:ABP中配置的注册和初始化

2016-03-15 17:22 288 查看
按常识理解,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法。执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数肯定是完成执行了。 ABP开始的地方就是HttpApplication的构造函数。 如下图一,Abp定义了一个继承自HttpApplication的类AbpApplication。该类的构造函数里会创建AbpBootstrapper实例,然后再Application_Start方法中调用AbpBootstrapper的Initialize方法(稍后解释)。 在Abp的web项目Global.asax中定义的HttpApplication派生类必须继承自AbpApplication(如下图二)。



(图 一)



(图 二)

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



(图 三)

除了DefaultModuleFinder其他都是单例的。AbpCoreInstaller注册的是系统框架级的所有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中。



返回ABP源码分析系列文章目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: