文档章节

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

徐自勉
 徐自勉
发布于 2017/02/13 17:50
字数 616
阅读 43
收藏 0

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

   public class AbpBootstrapper : IDisposable
     {
       /// <summary>
        /// Gets IIocManager object used by this class.
        /// </summary>
         public IIocManager IocManager { get; private set; }

         /// <summary>
        /// Is this object disposed before?
        /// </summary>
         protected bool IsDisposed;

        private IAbpModuleManager _moduleManager;
 //.........
 }

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

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

 public interface IIocManager : IIocRegistrar, IIocResolver, IDisposable
    {
        /// <summary>
         /// Reference to the Castle Windsor Container.
        /// </summary>
        IWindsorContainer IocContainer { get; }
 
         /// <summary>
       /// Checks whether given type is registered before.
        /// </summary>
         /// <param name="type">Type to check</param>
        new bool IsRegistered(Type type);

         /// <summary>
         /// Checks whether given type is registered before.
         /// </summary>
         /// <typeparam name="T">Type to check</typeparam>
        new bool IsRegistered<T>();
     }

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

 

© 著作权归作者所有

共有 人打赏支持
徐自勉
粉丝 2
博文 25
码字总数 34997
作品 0
武汉
程序员
ABP架构学习系列二:ABP中配置的注册和初始化

一、手工搭建平台 1.创建项目 创建MVC5项目,手动引入Abp、Abp.Web、Abp.Web.Mvc、Abp.Web.Api 使用nuget添加Newtonsoft.Json、Castle.Core、Castle.Windsor Install-Package Newtonsoft.Jso...

蚊子888
2017/12/01
0
0
ABP架构学习系列一 整体项目结构及目录

本系列是基于aspnetboilerplate-0.8.4.0版本写的,其中原因是由于较高的版本太抽象难以理解和分析,对于还菜菜的我要花更多的时间去学习。 abp的源码分析学习主要来源于 HK Zhang ,他的博客...

蚊子888
2017/11/30
0
0
ABP架构学习系列三:手工搭建ABP框架

  由于公司的项目才接触到ABP这个框架,当时就觉得高大上,什么IOC、AOP、ddd各种专业词汇让人激情 澎湃,但在使用过程中碰到了许多坑,可能也许是没有去看源码导致的,但工作确实没有那么...

蚊子888
2017/12/04
0
0
[Abp 源码分析]十、异常处理

0.简介 Abp 框架本身针对内部抛出异常进行了统一拦截,并且针对不同的异常也会采取不同的处理策略。在 Abp 当中主要提供了以下几种异常类型: 异常类型 描述 Abp 框架定义的基本异常类型,A...

myzony
08/11
0
0
[Abp 源码分析]十一、权限验证

0.简介 Abp 本身集成了一套权限验证体系,通过 ASP.NET Core 的过滤器与 Castle 的拦截器进行拦截请求,并进行权限验证。在 Abp 框架内部,权限分为两块,一个是功能(Feature),一个是权限项...

myzony
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx 配置url 跳转

Step 1:前言 公司一个管理后台,每次访问要写很长的参数,想直接访问域名就去管理页面 Step 2:配置 location / { rewrite ^/$ http://pay-admin.sasha-lab.com/index.php?m=admin&c...

Linux_Anna
17分钟前
2
0
php7在FreeBSD系统下静态编译iconv,导致BUS ERROR (core dump)解决

bug页面: https://bugs.php.net/bug.php?id=72198 触发此bug需要很多条件: FreeBSD系统(10.0以上),Linux系统、MacOS下均无此问题 静态编译iconv扩展,动态iconv扩展也无此问题 系统安装了...

hell0cat
21分钟前
3
0
FireFox下载时文件名乱码问题解决

String filename = java.net.URLEncoder.encode(file.getName(), "UTF-8"); response.setHeader("Content-Disposition", "attachment;filename*=utf-8'zh_cn'" + filename);......

放飞E梦想O
28分钟前
1
0
Spring声明式事务不回滚问题

注解 @Transactional 声明事务 内部调用方法不会走代理方式调用,而是类内部的函数调用,有事务注解也不会开启事务 但是当A有事务调用B时,B会加入A事务中,使之为同一事务 A无事务 ,B有事务...

职业搬砖20年
29分钟前
2
0
高并发的“大杀器”:异步化、并行化

高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多同学分不清楚,以为同步肯定就是阻塞,异步肯定就是非阻塞,其实他们并...

微笑向暖wx
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部