ABP 框架从源码学习——abp框架启动核心类AbpBootstrapper(2)

在AbpBootstrapper中的两个至关重要的属性:IIocManager 和 IAbpModuleManager 

 1   public class AbpBootstrapper : IDisposable
 2     {
 3         /// <summary>
 4         /// Gets IIocManager object used by this class.
 5         /// </summary>
 6         public IIocManager IocManager { get; private set; }
 7
 8         /// <summary>
 9         /// Is this object disposed before?
10         /// </summary>
11         protected bool IsDisposed;
12
13         private IAbpModuleManager _moduleManager;
14 //.........
15 }

IIocManager内部包装了一个Castle的依赖注入容器IWindsorContainer(abp使用的是Castle windor框架,在此框架的基础上做了一些封装),

所有类型的注册,解析还有后面实现的AOP机制的拦截器都是注册在该容器中的,将具体的注册还有解析功能分别包含在其父接口IIocRegistrar和IIocResolver中

 1  public interface IIocManager : IIocRegistrar, IIocResolver, IDisposable
 2     {
 3         /// <summary>
 4         /// Reference to the Castle Windsor Container.
 5         /// </summary>
 6         IWindsorContainer IocContainer { get; }
 7
 8         /// <summary>
 9         /// Checks whether given type is registered before.
10         /// </summary>
11         /// <param name="type">Type to check</param>
12         new bool IsRegistered(Type type);
13
14         /// <summary>
15         /// Checks whether given type is registered before.
16         /// </summary>
17         /// <typeparam name="T">Type to check</typeparam>
18         new bool IsRegistered<T>();
19     }

其中IIocRegistrar类的类图如下:

1.AddConventionalRegistrar,

2.RegisterAssemblyByConvention(Assembly assembly),

3.RegisterAssemblyByConvention(Assembly assembly, ConventionalRegistrationConfig config)

以上 三个方法需要特别注意:

第一个方法,AddConventionalRegistrar是向IocManager的一个私有泛型集合List<IConventionalDependencyRegistrar>注册注册机制,这句话不太好明白,简单说就是设定依赖注入模块的注入方式,

通常所有的Module类的预初始化方法中调用以决定哪些类型需要被注册(如果没有就无需调用),

比如在Abp程序集中的BasicConventionalRegistrar实现的就是搜索并注册指定的程序集中的所有实现了ITransientDependency,ISingletonDependency和IInterceptor的类并注册到依赖容器中,

第二,第三个方法执行真正的注册逻辑,

通常在一个个具体的Module的初始化方法中调用,传入当前Module所属的程序集,

迭代List<IConventionalDependencyRegistrar>将当前程序集作为参数执行注册,

第二,第三个方法的区别在于第三个方法多了一个ConventionalRegistrationConfig参数,以决定是否还需要搜索当前程序及中的IWindsorInstaller的实现类进行注册,默认是需要的。

IAbpModuleManager主要用于管理所有的模块默认也就是一个个的程序集(一个模块对应一个程序集),主要用于搜索到所有的Module以及他们的依赖Module,首先执行所有Module的PreInitialize方法再执行所有的Initialize,最后执行所有的PostInitialize,执行IAbpModuleManager的ShutdownModules时顺序颠倒依次执行所有具体Module的ShutDown方法。

时间: 2024-08-02 10:57:53

ABP 框架从源码学习——abp框架启动核心类AbpBootstrapper(2)的相关文章

HsqlDB源码学习——基本框架概览

Database: Database is the root class for HSQL Database Engine database.It holds the data structures that form an HSQLDB database instance. 整个体系结构大致如上图!接下来便一个一个学习,多么蛋疼的过程! HsqlDB源码学习--基本框架概览

HSQLDB源码学习——数据库安装启动及JDBC连接

HSQLDB 是一个轻量级的纯Java开发的开放源代码的关系数据库系统.因为HSQLDB的轻量(占用空间小),使用简单,支持内存运行方式等特点,HSQLDB被广泛用于开发环境和某些中小型系统中. 在http://sourceforge.net/projects/hsqldb/files/下载了HSQLDB 1.8.0版本.把下载的zip文件解压缩至任意目录例如c:\hsqldb1.8便完成安装. hsqldb有四种运行模式: 一.内存(Memory-Only)模式:所有数据都在内存里操作.应用程

SpringBoot源码学习系列之启动原理简介

本博客通过debug方式简单跟一下Springboot application启动的源码,Springboot的启动源码是比较复杂的,本博客只是简单梳理一下源码,浅析其原理 为了方便跟源码,先找个Application类,打个断点,进行调试,如图所示: step into,run方法调用了SpringApplication的run方法 通过debug,Springboot启动过程,会先执行如下关键的构造函数 分析构造函数源码: public SpringApplication(ResourceL

开源中国安卓客户端源码学习(一) 渐变启动界面

开源中国安卓客户端源码学习(一) 准备学习安卓开发, 看到网上有人推荐开源中国安卓客户端的源码, 说里面包含了大部分技术, 于是准备好好研究研究. 特开通此系列博客来记录学习过程. 由于是在学习, 经验不足, 里面肯定有很多不对的地方, 望大家指正. 到这里下载源码包,开发环境为Linux下Eclipse,导入源码后有可能会出现android.webkit.CacheManager找不到的错误, 原因是这个类在4.0以上版本的SDK被删除了, 只要下载4.0版本的SDK使用即可. 由于googl

【Spring源码分析系列】启动component-scan类扫描加载过程

原文地址:http://blog.csdn.net/xieyuooo/article/details/9089441/ 在spring 3.0以上大家都一般会配置一个Servelet,如下所示: 1 <servlet> 2 <servlet-name>spring</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-clas

ABP 框架从源码学习1--

一开始可能会写得很乱,因为自己也不太清楚从哪里入手,可能会直接将一些别人的心得罗列出来,后面我会在吸收了以后,找到了头绪,然后整理归纳出自己的东西. 不多扯了,先摘一段别人的心得,原文链接http://www.cnblogs.com/Azula/p/4988949.html AbpBootstrapper类在Abp.dll中,其主要用于框架的基本配置的注册和初始化,在Web应用启动阶段实例化一个AbpBootstrapper并调用Initialize方法初始化, public abstract

iOS源码学习总结框架

1.ARChromeActivity: 用于在Google Chrome中打开网址的UIActivity子类. 2.KINWebBrowser: 它使用iOS 8的 WKWebView API编写,同时在iOS 7上使用UIWebView来兼容. KINWebBrowserViewController must be contained in a UINavigationController. 3.PPGetAddressBook: PPGetAddressBook对AddressBook框架(

Java入门到精通——框架篇之Spring源码分析Spring两大核心类

一.Spring核心类概述. Spring里面有两个最核心的类这是Spring实现最重要的部分. 1.DefaultListableBeanFactory 这个类位于Beans项目下的org.springframework.beans.factory.support包下. XmlBeanFactory(位于org.springframework.beans.factory.xml包)继承自DefaultListableBeanFactory,而DefaultListableBeanFactory

spring源码阅读(2)核心类介绍

AliasRegistry:定义对alias的简单增删改操作 SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现. SingletonBeanRegistry:定于对单例的注册及获取. BeanFactory:定义获取bean及bean的各种属性. DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现. HierarchialBeanFactory:继承BeanF