一 .框架体系的介绍

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,完成自己的需求配置即可。

ABP之框架体系的更多相关文章

  1. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

  2. NBIbatis 框架体系说明

    框架体系说明 Application 表现层 表现层必须通过Business业务规则层操作数据库,不能直接调用DataAccess数据访问. Sqlmap.config配置: connectionSt ...

  3. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  4. 手工搭建基于ABP的框架 - 工作单元以及事务管理

    一个业务功能往往不只由一次数据库请求(或者服务调用)实现.为了功能的完整性,我们希望如果该功能执行一半时出错,则撤销前面已执行的改动.在数据库层面上,事务管理实现了这种完整性需求.在ABP中,一个完整 ...

  5. Java集合框架体系JCF

    Java 集合框架体系作为Java 中十分重要的一环, 在我们的日常开发中扮演者十分重要的角色, 那么什么是Java集合框架体系呢? 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一 ...

  6. Abp vNext框架 实例程序BookStore-笔记

    参考 Abp vNext框架 应用程序开发教程 创建项目和书籍列表页面 http://www.vnfan.com/helinbin/d/3579c6e90e1d23ab.html 官方源码 https ...

  7. Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application-笔记

    参考 Abp vNext框架 从空项目开始 使用ASP.NET Core Web Application http://www.vnfan.com/helinbin/d/745b1e040c9b4f6 ...

  8. java集合类-集合框架体系

    集合框架体系 集合框架体系是由Collection.Map和 Iterator(迭代器) 实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection体系 Set接口:元素无序且不 ...

  9. Java 集合框架体系总览

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...

随机推荐

  1. 使用editorconfig配置你的编辑器

    摘要: 在团队开发中,统一的代码格式是必要的.但是不同开发人员使用的编辑工具可能不同,这样就造成代码的differ.今天给大家分享一个很好的方法来使不同的编辑器保持一样的风格. 不同的编辑器也有设置代 ...

  2. python类和模块区别,python命名空间

    在python中,类可以提供模块级别之下的命名空间. 如果一个模块写很多函数,某些函数之间共同完成一组功能,用类会看起来更清晰,在调用时候也会更好,对于ide补全有更小范围的限定提示. 类提供 继承 ...

  3. extjs 分组函数自定义统计

    //获取统计信息函数 Ext.getStatText = function (values) { var zy = 0; var tm = 0; for (var i = 0; i < valu ...

  4. iOS 应用中打开其他应用 (转)

    我们来讨论一下,在iOS开发中,如何实现从app1打开app2. 基本的思路就是,可以为app2定义一个URL,在app1中通过打开这个URL来打开app2,在此过程中,可以传送一些参数.下面来讨论一 ...

  5. ns-3 的下载、编译以及 Eclipse 的相关配置

    0. 写在前面 对于初次接触Linux系统的人来说,ns-3 的安装似乎并不友好.但其实仅仅要按部就班地来做,其安装过程也没有看上去的那么复杂.本文将官方 Wiki 中的安装过程稍作梳理,希望能为刚開 ...

  6. 5 -- Hibernate的基本用法 --4 2 hibernate.properties文件与hibernate.cfg.xml文件

    hibernate.properties : project\etc\hibernate.properties hibernate.cfg.xml : project\etc\hibernate.cf ...

  7. json_encode让URL内容斜杠/不转义

    同事在开发接口的时候根据接口提示要求传参一个字符串json,该json格式中有URL数组,按照json_encode编码后总发现 http://变成了 http:\/\/  .URL的斜杠自动的被转义 ...

  8. 【RF库Collections测试】Remove From List

    Name:Remove From ListSource:Collections <test library>Arguments:[ list_ | index ]Removes and r ...

  9. Perl socket编程

    In this article, let us discuss how to write Perl socket programming using the inbuilt socket module ...

  10. Selenium 获取节点信息

    Selenium 可以通过 find_element() 找到指定的节点,Selenium 也提供了相关的方法和属性来直接提取节点信息,如属性.文本等 from selenium import web ...