ABP模块系统简介

参考:
ABP中配置的注册和初始化
ABP模块系统
ABP 源码解析 一. ABP启动

ABP框架提供了创建和组装模块的基础,一个模块能够依赖于另一个模块。在通常情况下,一个程序集就可以看成是一个模块。在ABP框架中,一个模块通过一个类来定义,而这个类要继承自AbpModule。

模块生命周期事件

在一个应用中,abp框架调用了Module模块的一些指定的方法来进行启动和关闭模块的操作。我们可以重载这些方法来完成我们自己的任务。

ABP框架通过依赖关系的顺序来调用这些方法,
假如:模块A依赖于模块B,那么模块B要在模块A之前初始化,模块启动的方法顺序如下:

  1. PreInitialize-B
  2. PreInitialize-A
  3. Initialize-B
  4. Initialize-A
  5. PostInitialize-B
  6. PostInitialize-A

模块预定义事件

  • PreInitialize:
    预初始化:当应用启动后,第一次会调用这个方法。在依赖注入注册之前,你可以在这个方法中指定自己的特别代码。举个例子吧:假如你创建了一个传统的登记类,那么你要先注册这个类(使用IocManager对登记类进行注册),你可以注册事件到IOC容器。等。

  • Initialize
    初始化:在这个方法中一般是来进行依赖注入的注册,一般我们通过IocManager.RegisterAssemblyByConvention这个方法来实现。如果你想实现自定义的依赖注入,那么请参考依赖注入的相关文档。

  • PostInitialize
    提交初始化:最后一个方法,这个方法用来解析依赖关系。

  • Shutdown:
    关闭:当应用关闭以后,这个方法被调用。

示例:模块的运用

我们先定义一个模块程序集,然后在控制台应用中使用该模块

  1. 创建一个.net framework类库项目:MyModule1
  2. 通过Nuget引入ABP包
  3. 定义模块: 添加一个类MyModule1,继承自AbpModule
  4. 重写Initialize方法,把当前程序集的特定类或接口注册到依赖注入容器中
  5. 添加一个示例类TestClass,实现ITransientDependency接口
  6. 添加一个.Net Framework 控制台应用程序,并添加MyModule1项目的引用
  7. 在Main方法中创建并初始化AbpBootstrapper类的实例
  8. 初始化AbpBootstrapper类的实例
  9. 通过Ioc容器获取MyModule1模块中TestClass类的实例
  10. 使用模块中的类定义的方法

源码:

  1. MyModule1项目:
    TestClass.cs:
using Abp.Dependency;namespace MyModule1
{public class TestClass : ITransientDependency{public string SayHello(){return "Hello,World!";}}
}

MyModule1.cs:

using Abp.Modules;
using System.Reflection;namespace MyModule1
{public class MyModule1 : AbpModule{/// <summary>/// 模块初始化/// </summary>public override void Initialize(){//这行代码的写法基本上是不变的。//它的作用是把当前程序集的特定类或接口注册到依赖注入容器中。IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());}}
}
  1. ModuleTestConsole项目:
using Abp;
using Abp.Dependency;
using MyModule1;
using System;namespace ModuleTestConsole
{class Program{static void Main(string[] args){//创建AbpBootstrapper实例using (var bootstrapper = AbpBootstrapper.Create<MyModule1.MyModule1>()){//初始化AbpBootstrapper实例bootstrapper.Initialize();//通过Ioc容器获取MyModule1模块中TestClass类的实例using (var tester = bootstrapper.IocManager.ResolveAsDisposable<TestClass>()){//使用模块中的类定义的方法var result = tester.Object.SayHello();Console.WriteLine(result);} //Disposes tester and all it's dependenciesConsole.WriteLine("Press enter to exit...");Console.ReadLine();}}}
}

模块依赖

Abp框架会自动解析模块之间的依赖关系,但是我们还是建议你通过重载GetDependencies方法来明确的声明依赖关系。
这个可以参考官方示例项目:AbpEfConsoleApp
在这个项目里面,定义了一个MyConsoleAppModule模块,它依赖于AbpEntityFrameworkModule,这里通过特性(Attribute)声明了依赖关系

ABP模块系统学习及使用相关推荐

  1. ABP模块系统插件机制

    从官网下载ABP项目后,发现一般是有6个程序集,程序集之间是怎么相互关联的呢?这有关ABP的模块系统. 官网上模块的定义如下,模块定义有一个类,该类派生自ABP包中的AbpModule.假设我们正在开 ...

  2. ABP官方文档(三)【模块系统】

    1.3 ABP总体介绍 - 模块系统 1.3.1 ABP模块系统简介 ABP框架提供了创建和组装模块的基础,一个模块能够依赖于另一个模块.在通常情况下,一个程序集就可以看成是一个模块.在ABP框架中, ...

  3. ABP官方文档翻译 1.3 模块系统

    ABP模块系统 介绍 模块定义 生命周期方法 PreInitialize Initialize PostInitialize Shutdown 模块依赖 插件系统 ASP.NET Core ASP.N ...

  4. 【ABP框架系列学习】模块系统(4)

    [ABP框架系列学习]模块系统(4) 原文:[ABP框架系列学习]模块系统(4) 0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施.一个模块可以依赖于另外一个模块.通常,程序集可以 ...

  5. [Abp vNext 源码分析] - 2. 模块系统的变化

    一.简要说明 本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 I ...

  6. 【ABP框架系列学习】模块系统之插件示例开发

    0.引言 上一篇博文主要介绍了ABP模块及插件的相关知识,本章节主要开发一个插件示例来学习如何创建一个插件,并在应用程序中使用.这个命名为FirstABPPlugin的插件主要在指定的时间段内删除审计 ...

  7. 系统学习Python——模块和包:模块基础知识

    分类目录:<系统学习Python>总目录 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突.从实际的角度来看,模块往往 ...

  8. 系统学习Python——进度条模块tqdm

    分类目录:<系统学习Python>总目录 tqdm在阿拉伯语中是"进步"的意思(塔卡杜姆,تقدّم)并且是西班牙语中"我非常爱你"的缩写.在Pyt ...

  9. python自学流程-Python系统学习流程图,教你一步步学习python

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

最新文章

  1. 【动态规划】最长公子序列 - dp
  2. Data Guard相关参数学习介绍
  3. R-CNN 《Rich Feature Hierachies for Accurate Object Detection and Semantic Segmentation》论文笔记
  4. 博物馆奇妙夜java_博物馆奇妙夜 2 Night At The Museum
  5. CTA策略05_AtrRsiStrategy
  6. JavaScript 基础(二)
  7. attr()里面的回调函数
  8. 自学python能做erp吗_erp系统可以自学吗?应该怎么学习?
  9. C语言求13位条形码的验证码,c语言问题 条形码输入
  10. dedecms教程:龙书浩最新DedeCmsV5.7建站仿站VIP视频教程免费下载
  11. [LTE] RRU BBU 和 前传(fronthaul)
  12. ELEMENT UI中关于上传图片el-upload控件删除(同时删除后台图片信息)
  13. 软件测试过程与方法_第4周单元测试
  14. 从零开始的微信小程序入门教程(一)
  15. (最简单)安装vmware-tools实现复制粘贴和文件复制粘贴
  16. 公司招了个五年经验的测试员,见识到了真正的测试天花板
  17. 第二代3D TLC NAND原厂级深度评测 | 是否如你所愿?
  18. 无人智能配送机器人现状
  19. ST算法 - RMQ(区间最值问题)—— 倍增
  20. JWT(跨域身份验证解决方案)

热门文章

  1. 学计算机专业 要画素描吗,数位板可以画素描吗?电脑绘画也能画素描!
  2. IDA 插件 idbtopat.plw的用途
  3. destoon 实用手册1
  4. 电池管理和连接器对电动汽车
  5. OpenGL粒子系统和变换反馈
  6. 如何实现高压环境下的逆变器交直流电压、电流的安全测量?
  7. 计算机小白对计算机的认识
  8. CTF Crypto---RSA KCS1_OAEP模式
  9. 股票常用名词解释与技术指标公式
  10. 求助:无法定位序数于动态链接库....SSLEAY32.dll上