一 .框架体系的介绍

ABP框架采用的是DDD(领域驱动设计)的原则,可以很方便实现项目之间的松耦合,采用模块化的方式,方便对框架的扩展。

按照DDD的原则,首先将项目分为四层:

展现层:用来展现给用户,并和用户进行交互的层。

应用层(Application):用来和领域层进行交互。

领域层(Domain):这个是核心层,完成基本逻辑和数据的处理。

基础设施层(infrastructure):这个是封装了对数据库的处理,如ORM框架

具体的框架体系分布:

二 . ABP项目文件的介绍

 三. ABP中Module的生命周期

在ABP框架中采用的模块的方式进行加载,那么它的执行顺序是怎样的呢?

上面的代码是从Core层拿过来的,其中可以注意到,任何自定义的Module都必须继承AbpModule,同时发现有几个特殊的方法。

(1)PreInitialize:预初始化,当应用第一次启动的时候,会首先调用这个方法,这个方法是在依赖注入之前,可以在这个方法中自定义启动类。上述代码中可以看到进行了一些配置。

(2)Initialize:初始化,大多是将一些类库注入到容器中去,注入的方式IocMananger.RegisterAssemblyByConvetion().

(3)PostInitialize:提交初始化的内容,用来解析依赖关系。

(4)Shutdown:这个方法不常用,就是在关闭应用的时候被调用。

那么问题来了,在ABP框架中存在好多的Module,那么具体是怎样进行初始化的呢?(两种可能的方式:1.ModuleA的PreInitialize,然后ModuleaA的Initiallize。。。当ModuleA初始化完后在执行ModuleB 2.执行ModuleA的PreInitialize ,执行ModuleB的PreInitialize,然后执行ModuleA的Initialize和ModuleB的Initialize)

在ABP框架中会自动解析依赖关系,但是还是建议明确的指明依赖关系,上面就是使用特性标签的方式标注依赖关系。

从上面的代码可以看出ModuleA依赖于ModuleB,那么他们的执行顺序是:

PreInitialize-ModuleB

PreInitialize-ModuleA

Initialize-ModuleB

Initialize-ModuleA

PostInitialize-ModuleB

PostInitialize-ModuleA

(看样子第二种猜测是正确的)

关于自定义Module,只需要继承自AbpModule,然后分别实现对应的PreInitialize和Initialize,完成自己的需求配置即可。

最新文章

  1. hudson slave搭建
  2. MVC学习笔记-01
  3. 创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
  4. 六个创建模式之工厂方法模式(Factory Method Pattern)
  5. lintcode:排颜色 II
  6. Linux下基于HTTP协议带用户认证的GIT开发环境设置
  7. 【LeetCode】118 & 119 - Pascal's Triangle & Pascal's Triangle II
  8. Hadoop启动异常情况解决方案
  9. 极光推送使用实例(二) Android客户端
  10. iOS动画详解(一)
  11. python面向对象高级编程
  12. _declspec(dllexport)与_declspec(dllimport)
  13. SQL查询优化——数据结构设计
  14. 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数
  15. Spring mybatis源码篇章-MybatisDAO文件解析(一)
  16. layui数据表格以及传数据方式
  17. 分布式架构探索 - 2. WebService RPC框架之Apache CXF
  18. _luckdraw
  19. python 之 json 与pickle 模块
  20. 借助 Java 9 Jigsaw,如何在 60 秒内创建 JavaFX HelloWorld 程序?

热门文章

  1. Linux下php安装Redis安装
  2. win7 、2008 提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
  3. php中实现记住密码下次自动登录的例子
  4. C#------Aspose的License文件
  5. 8 -- 深入使用Spring -- 7...1 启动Spring 容器
  6. C++ 枚举转字符串
  7. Anaconda本地安装python库
  8. Android中显示照片的Exif信息
  9. 【NodeJS】热更新
  10. oracle nvl,having的用法