abp模块生命周期设计思路剖析
abp中将生命周期事件抽象为4个接口:
//预初始化
public interface IOnPreApplicationInitialization
{void OnPreApplicationInitialization([NotNull] ApplicationInitializationContext context);
}//初始化
public interface IOnApplicationInitialization
{void OnApplicationInitialization([NotNull] ApplicationInitializationContext context);
}//初始化完成
public interface IOnPostApplicationInitialization
{void OnPostApplicationInitialization([NotNull] ApplicationInitializationContext context);
}//关闭
public interface IOnApplicationShutdown
{void OnApplicationShutdown([NotNull] ApplicationShutdownContext context);
}
abp定义了一个模块生命周期接口,该接口只有两个方法,用于初始化和关闭。
public interface IModuleLifecycleContributor : ITransientDependency
{void Initialize([NotNull] ApplicationInitializationContext context, [NotNull] IAbpModule module);void Shutdown([NotNull] ApplicationShutdownContext context, [NotNull] IAbpModule module);
}
这个接口的参数是IAbpModule接口的类型,也就是派生自AbpModule的模块类型。该接口有一个默认实现,是一个抽象类,主要是用于复用。
public abstract class ModuleLifecycleContributorBase : IModuleLifecycleContributor
{public virtual void Initialize(ApplicationInitializationContext context, IAbpModule module){}public virtual void Shutdown(ApplicationShutdownContext context, IAbpModule module){}
}
abp根据四个生命周期分别有四个类型,这四个类型是基于模块生命周期基类创建的。
public class OnApplicationInitializationModuleLifecycleContributor : ModuleLifecycleContributorBase
{public override void Initialize(ApplicationInitializationContext context, IAbpModule module){(module as IOnApplicationInitialization)?.OnApplicationInitialization(context);}
}public class OnApplicationShutdownModuleLifecycleContributor : ModuleLifecycleContributorBase
{public override void Shutdown(ApplicationShutdownContext context, IAbpModule module){(module as IOnApplicationShutdown)?.OnApplicationShutdown(context);}
}public class OnPreApplicationInitializationModuleLifecycleContributor : ModuleLifecycleContributorBase
{public override void Initialize(ApplicationInitializationContext context, IAbpModule module){(module as IOnPreApplicationInitialization)?.OnPreApplicationInitialization(context);}
}public class OnPostApplicationInitializationModuleLifecycleContributor : ModuleLifecycleContributorBase
{public override void Initialize(ApplicationInitializationContext context, IAbpModule module){(module as IOnPostApplicationInitialization)?.OnPostApplicationInitialization(context);}
}
只有"关闭应用"这个生命周期实现Shutdown方法,其余的都是实现Initialize方法。最后是传入的参数abp模块去调用对应的生命周期。
剖析图如下:
abp模块生命周期设计思路剖析相关推荐
- 以Transaction的生命周期为线索剖析Libra核心组件
以Transaction的生命周期为线索剖析Libra核心组件 账号模型 Transaction与Move合约 Transaction的生命周期 AC服务 Mempool服务 Mempool内的Tra ...
- Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战
本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...
- leaf游戏服务器开发系列,Leaf游戏服务器简析(一)之模块生命周期
Module(模块)的生命周期 使用leaf开发游戏服务器由多个模块组成,模块的定义如下: // leaf/module.go type Module interface{ OnInit() OnDe ...
- 前端React教程第二课 React生命周期设计思想
02 为什么 React 16 要更改组件的生命周期?(上) React 生命周期已经是一个老生常谈的话题了,几乎没有哪一门 React 入门教材会省略对组件生命周期的介绍.然而,入门教材在设计上往往 ...
- UE4 Actor生命周期 SpawnActor DestroyActor剖析
原创文章,转载请注明出处. AActor很重要,只要是我们世界大纲列表内的物体,全部都是AActor. 目录 第一部分,从编辑器点击Play开始分析World里面全部的Actor的Spawn流程,分析 ...
- 软件的接口设计图_产品基础 | 软件生命周期
一.什么是软件生命周期? 软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义.可行性分析.总体描述.系统设计.编码.调试和测试.验收与运行.维护升级到废 ...
- Hasor:生命周期
为什么80%的码农都做不了架构师?>>> 首先引用Wiki的介绍一下Hasor: "Hasor是一款开源框架.它是为了解决企业模块化开发中复杂性而创建的.Ha ...
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期-03
目录 本博客环境 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pyc ...
- 软件的生命周期的若干阶段
要做好一个软件,要了解软件的生命周期,在什么阶段,要做好什么事情! 在了解软件的生命周期之前,先了解一下软件工程. 软件工程 软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科 ...
最新文章
- css float left right 中间空间城数据无法显示
- rabbitmq 查询版本_Hyperf 发布 v2.0.14 版本 | 企业级的 PHP 微服务云原生协程框架
- C++(七)——多态
- PyQt5利用QPainter绘制各种图形
- 经典论文复现 | 基于标注策略的实体和关系联合抽取
- GIT文件的三种状态
- OpenCV学习笔记(七):形态学morpholgy(1):腐蚀/膨胀:enrode(),dilate()
- 添加class值_Java 虚拟机(二) - Class 文件结构
- Gsoap在QT工程里如何调用
- jquery层次选择器:空格 > next + nextAll ~ siblings
- 常用十六进制颜色对照表代码
- 深入理解Attention及变种(二)
- Unsupervised Keyphrase Extraction by Jointly Modeling Local and Global Context 阅读笔记
- exe4j打成的exe文件运行时弹窗this executable was created with an evaluation version of exe4j问题解决
- 点燃我温暖你 爱心代码python
- FastQC安装以及试用
- 我把海外抖音TikTok当副业,一周赚了7000块:想给有梦想的人提个醒!
- 2022-2028全球与中国数据虚拟化解决方案市场现状及未来发展趋势
- linux下贪吃蛇代码,贪吃蛇 linux 程序
- 学什么技术比较好呢?IT技术很不错