ABP模块系统学习及使用
ABP模块系统简介
参考:
ABP中配置的注册和初始化
ABP模块系统
ABP 源码解析 一. ABP启动
ABP框架提供了创建和组装模块的基础,一个模块能够依赖于另一个模块。在通常情况下,一个程序集就可以看成是一个模块。在ABP框架中,一个模块通过一个类来定义,而这个类要继承自AbpModule。
模块生命周期事件
在一个应用中,abp框架调用了Module模块的一些指定的方法来进行启动和关闭模块的操作。我们可以重载这些方法来完成我们自己的任务。
ABP框架通过依赖关系的顺序来调用这些方法,
假如:模块A依赖于模块B,那么模块B要在模块A之前初始化,模块启动的方法顺序如下:
- PreInitialize-B
- PreInitialize-A
- Initialize-B
- Initialize-A
- PostInitialize-B
- PostInitialize-A
模块预定义事件
PreInitialize:
预初始化:当应用启动后,第一次会调用这个方法。在依赖注入注册之前,你可以在这个方法中指定自己的特别代码。举个例子吧:假如你创建了一个传统的登记类,那么你要先注册这个类(使用IocManager对登记类进行注册),你可以注册事件到IOC容器。等。Initialize
初始化:在这个方法中一般是来进行依赖注入的注册,一般我们通过IocManager.RegisterAssemblyByConvention这个方法来实现。如果你想实现自定义的依赖注入,那么请参考依赖注入的相关文档。PostInitialize
提交初始化:最后一个方法,这个方法用来解析依赖关系。Shutdown:
关闭:当应用关闭以后,这个方法被调用。
示例:模块的运用
我们先定义一个模块程序集,然后在控制台应用中使用该模块
- 创建一个.net framework类库项目:MyModule1
- 通过Nuget引入ABP包
- 定义模块: 添加一个类MyModule1,继承自AbpModule
- 重写Initialize方法,把当前程序集的特定类或接口注册到依赖注入容器中
- 添加一个示例类TestClass,实现ITransientDependency接口
- 添加一个.Net Framework 控制台应用程序,并添加MyModule1项目的引用
- 在Main方法中创建并初始化AbpBootstrapper类的实例
- 初始化AbpBootstrapper类的实例
- 通过Ioc容器获取MyModule1模块中TestClass类的实例
- 使用模块中的类定义的方法
源码:
- 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());}}
}
- 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模块系统学习及使用相关推荐
- ABP模块系统插件机制
从官网下载ABP项目后,发现一般是有6个程序集,程序集之间是怎么相互关联的呢?这有关ABP的模块系统. 官网上模块的定义如下,模块定义有一个类,该类派生自ABP包中的AbpModule.假设我们正在开 ...
- ABP官方文档(三)【模块系统】
1.3 ABP总体介绍 - 模块系统 1.3.1 ABP模块系统简介 ABP框架提供了创建和组装模块的基础,一个模块能够依赖于另一个模块.在通常情况下,一个程序集就可以看成是一个模块.在ABP框架中, ...
- ABP官方文档翻译 1.3 模块系统
ABP模块系统 介绍 模块定义 生命周期方法 PreInitialize Initialize PostInitialize Shutdown 模块依赖 插件系统 ASP.NET Core ASP.N ...
- 【ABP框架系列学习】模块系统(4)
[ABP框架系列学习]模块系统(4) 原文:[ABP框架系列学习]模块系统(4) 0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施.一个模块可以依赖于另外一个模块.通常,程序集可以 ...
- [Abp vNext 源码分析] - 2. 模块系统的变化
一.简要说明 本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 I ...
- 【ABP框架系列学习】模块系统之插件示例开发
0.引言 上一篇博文主要介绍了ABP模块及插件的相关知识,本章节主要开发一个插件示例来学习如何创建一个插件,并在应用程序中使用.这个命名为FirstABPPlugin的插件主要在指定的时间段内删除审计 ...
- 系统学习Python——模块和包:模块基础知识
分类目录:<系统学习Python>总目录 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便再利用,同时提供自包含的命名空间从而避免程序出现变量名冲突.从实际的角度来看,模块往往 ...
- 系统学习Python——进度条模块tqdm
分类目录:<系统学习Python>总目录 tqdm在阿拉伯语中是"进步"的意思(塔卡杜姆,تقدّم)并且是西班牙语中"我非常爱你"的缩写.在Pyt ...
- python自学流程-Python系统学习流程图,教你一步步学习python
对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...
最新文章
- 【动态规划】最长公子序列 - dp
- Data Guard相关参数学习介绍
- R-CNN 《Rich Feature Hierachies for Accurate Object Detection and Semantic Segmentation》论文笔记
- 博物馆奇妙夜java_博物馆奇妙夜 2 Night At The Museum
- CTA策略05_AtrRsiStrategy
- JavaScript 基础(二)
- attr()里面的回调函数
- 自学python能做erp吗_erp系统可以自学吗?应该怎么学习?
- C语言求13位条形码的验证码,c语言问题 条形码输入
- dedecms教程:龙书浩最新DedeCmsV5.7建站仿站VIP视频教程免费下载
- [LTE] RRU BBU 和 前传(fronthaul)
- ELEMENT UI中关于上传图片el-upload控件删除(同时删除后台图片信息)
- 软件测试过程与方法_第4周单元测试
- 从零开始的微信小程序入门教程(一)
- (最简单)安装vmware-tools实现复制粘贴和文件复制粘贴
- 公司招了个五年经验的测试员,见识到了真正的测试天花板
- 第二代3D TLC NAND原厂级深度评测 | 是否如你所愿?
- 无人智能配送机器人现状
- ST算法 - RMQ(区间最值问题)—— 倍增
- JWT(跨域身份验证解决方案)