zoukankan      html  css  js  c++  java
  • 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 }
    View Code

    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     }
    View Code

    其中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方法。

  • 相关阅读:
    C语言基础
    R安装包
    随笔
    计算机组成原理(三)--存储器的层次结构
    计算机组成原理(一)
    查找
    二叉树
    Mesos
    第三章 线性表
    第四章 栈与队列
  • 原文地址:https://www.cnblogs.com/xuzimian/p/5579144.html
Copyright © 2011-2022 走看看