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模块生命周期设计思路剖析相关推荐

  1. 以Transaction的生命周期为线索剖析Libra核心组件

    以Transaction的生命周期为线索剖析Libra核心组件 账号模型 Transaction与Move合约 Transaction的生命周期 AC服务 Mempool服务 Mempool内的Tra ...

  2. Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  3. leaf游戏服务器开发系列,Leaf游戏服务器简析(一)之模块生命周期

    Module(模块)的生命周期 使用leaf开发游戏服务器由多个模块组成,模块的定义如下: // leaf/module.go type Module interface{ OnInit() OnDe ...

  4. 前端React教程第二课 React生命周期设计思想

    02 为什么 React 16 要更改组件的生命周期?(上) React 生命周期已经是一个老生常谈的话题了,几乎没有哪一门 React 入门教材会省略对组件生命周期的介绍.然而,入门教材在设计上往往 ...

  5. UE4 Actor生命周期 SpawnActor DestroyActor剖析

    原创文章,转载请注明出处. AActor很重要,只要是我们世界大纲列表内的物体,全部都是AActor. 目录 第一部分,从编辑器点击Play开始分析World里面全部的Actor的Spawn流程,分析 ...

  6. 软件的接口设计图_产品基础 | 软件生命周期

    一.什么是软件生命周期? 软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义.可行性分析.总体描述.系统设计.编码.调试和测试.验收与运行.维护升级到废 ...

  7. Hasor:生命周期

    为什么80%的码农都做不了架构师?>>>    首先引用Wiki的介绍一下Hasor:     "Hasor是一款开源框架.它是为了解决企业模块化开发中复杂性而创建的.Ha ...

  8. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期-03

    目录 本博客环境 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pyc ...

  9. 软件的生命周期的若干阶段

    要做好一个软件,要了解软件的生命周期,在什么阶段,要做好什么事情! 在了解软件的生命周期之前,先了解一下软件工程. 软件工程 软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科 ...

最新文章

  1. css float left right 中间空间城数据无法显示
  2. rabbitmq 查询版本_Hyperf 发布 v2.0.14 版本 | 企业级的 PHP 微服务云原生协程框架
  3. C++(七)——多态
  4. PyQt5利用QPainter绘制各种图形
  5. 经典论文复现 | 基于标注策略的实体和关系联合抽取
  6. GIT文件的三种状态
  7. OpenCV学习笔记(七):形态学morpholgy(1):腐蚀/膨胀:enrode(),dilate()
  8. 添加class值_Java 虚拟机(二) - Class 文件结构
  9. Gsoap在QT工程里如何调用
  10. jquery层次选择器:空格 > next + nextAll ~ siblings
  11. 常用十六进制颜色对照表代码
  12. 深入理解Attention及变种(二)
  13. Unsupervised Keyphrase Extraction by Jointly Modeling Local and Global Context 阅读笔记
  14. exe4j打成的exe文件运行时弹窗this executable was created with an evaluation version of exe4j问题解决
  15. 点燃我温暖你 爱心代码python
  16. FastQC安装以及试用
  17. 我把海外抖音TikTok当副业,一周赚了7000块:想给有梦想的人提个醒!
  18. 2022-2028全球与中国数据虚拟化解决方案市场现状及未来发展趋势
  19. linux下贪吃蛇代码,贪吃蛇 linux 程序
  20. 学什么技术比较好呢?IT技术很不错

热门文章

  1. MongoDB基本命令的使用
  2. dreambackend.java_【AndroidTV】如何自定义屏保、更改屏保时长
  3. 国内是否可以安装alexa_Alexa可以听到您无法听到的命令,哪些黑客可以利用
  4. 使用CADisplayLink实现UILabel动画特效
  5. nginx php 配置
  6. Jmeter录制app脚本
  7. corosync和pacemaker实现httpd和mysql双集群
  8. mysqldump 的常用参数。
  9. C#学习笔记(十四):StatusBar控件
  10. WPF 实现验证码控件