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(如下图二)。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230032943-893148037.png)
(图 一)
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230043021-730014896.png)
(图 二)
再看AbpBootstrapper的Initialize方法。AbpBootstrapper的Initialize()方法首先给IocManager的IocContainer(也就是IWindsorContainer, ABP使用Castle完成依赖注入) Install AbpCoreInstaller (如图三). AbpCoreInstaller来注册系统框架级的所有配置类,具体代码如下(如图四)
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230002318-162319489.png)
(图 三)
除了DefaultModuleFinder其他都是单例的。AbpCoreInstaller注册的是系统框架级的所有configuration.
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314225950881-1396021728.png)
(图 四)
以下是AbpCoreInstaller代码在ABP源码中的位置。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314225934912-1909027378.png)
(图 五)
IocManager的IocContainer就是IWindsorContainer, ABP使用Castle完成依赖注入。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230012115-246554282.png)
AbpBootstrapper类持有IocManager实例
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230022662-580579688.png)
AbpCoreInstaller只是完成注册系统框架级的所有配置类。Abp支持自动完成符合Conventional的组件的注册。 Conventional 的规则要通过继承IConventionalDependencyRegistrar接口实现。
如下图,ABP中继承自IConventionalDependencyRegistrar接口的四个类。 其中BasicConventionalRegistrar设置了所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类都会被自动注册。
其他三个则分别注册AbpDbContext,ApiController和Controller的派生类。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230053146-1980883568.png)
BasicConventionalRegistrar的代码,其注册所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230102412-859774646.png)
IIocManager是处理依赖注入的核心接口,他将具体的注册还有解析功能分别包含在其父接口IIocRegistrar和IIocResolver中。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230111959-230096876.png)
返回ABP源码分析系列文章目录
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230032943-893148037.png)
(图 一)
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230043021-730014896.png)
(图 二)
再看AbpBootstrapper的Initialize方法。AbpBootstrapper的Initialize()方法首先给IocManager的IocContainer(也就是IWindsorContainer, ABP使用Castle完成依赖注入) Install AbpCoreInstaller (如图三). AbpCoreInstaller来注册系统框架级的所有配置类,具体代码如下(如图四)
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230002318-162319489.png)
(图 三)
除了DefaultModuleFinder其他都是单例的。AbpCoreInstaller注册的是系统框架级的所有configuration.
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314225950881-1396021728.png)
(图 四)
以下是AbpCoreInstaller代码在ABP源码中的位置。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314225934912-1909027378.png)
(图 五)
IocManager的IocContainer就是IWindsorContainer, ABP使用Castle完成依赖注入。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230012115-246554282.png)
AbpBootstrapper类持有IocManager实例
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230022662-580579688.png)
AbpCoreInstaller只是完成注册系统框架级的所有配置类。Abp支持自动完成符合Conventional的组件的注册。 Conventional 的规则要通过继承IConventionalDependencyRegistrar接口实现。
如下图,ABP中继承自IConventionalDependencyRegistrar接口的四个类。 其中BasicConventionalRegistrar设置了所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类都会被自动注册。
其他三个则分别注册AbpDbContext,ApiController和Controller的派生类。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230053146-1980883568.png)
BasicConventionalRegistrar的代码,其注册所有继承至ITransientDependency,ISingletonDependency和IInterceptor接口的类。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230102412-859774646.png)
IIocManager是处理依赖注入的核心接口,他将具体的注册还有解析功能分别包含在其父接口IIocRegistrar和IIocResolver中。
![](http://images2015.cnblogs.com/blog/4776/201603/4776-20160314230111959-230096876.png)
返回ABP源码分析系列文章目录
相关文章推荐
- 一个Trie树的简单实现
- java与tomcat类加载机制
- [Java代码] 算法练习08:Sunday算法
- Activity launchMode
- 为什么打的项目中cookie要加前缀
- Android-UI层的三种框架模式-MVC、MVP、MVVM
- Android高效加载大图、多图解决方案,有效避免程序OOM
- javascript中in语句的使用
- UIwebview
- pdf转换为word文件,你真的会吗?
- iOS:禁止手势滑动切换界面
- 设计模式(三)工厂方法模式(Factory Pattern)
- MySQL——商业版和社区版的区别
- JSP自定义标签开发入门
- 【POJ 1837】Balance(01背包)
- 深入理解Java的接口和抽象类
- Android小技巧——TextView的一些小技巧
- HDU 5641 King's Phone
- 安卓手机通过 Fiddler代理上网教程,抓包
- 用户和用户组管理