ABP模块系统学习及使用

2023-11-06

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 dependencies

                Console.WriteLine("Press enter to exit...");
                Console.ReadLine();
            }
        }
    }
}

模块依赖

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ABP模块系统学习及使用 的相关文章

随机推荐

  • 谷粒商城--整合Elasticsearch和商品的上架

    整合Elasticsearch和商品的上架 一 整合ES ES常用概念 索引 类型 文档是什么 倒排索引 相关度分数score的计算 安装ES和Kibana 快速安装 ES kibana 初步检索 cat ES的增删改查 新增文档 put新
  • 第二天-03-安卓手机的入侵实验

    安卓手机入侵实验 要求 电脑主机与手机模拟器或者真机在当前环境下 网络是畅通的 相互之间可以进行通信 如何进行测试网络环境 我们首先需要确定IP linux通过终端命令 ip a 或者 ifconfig windown下 win加r输入cm
  • Apollo使用404错误问题

    在使用spring项目接入携程 apollo 的时候 报了一个错误 Cause status code 404 Could not find config for namespace appId housing102 cluster def
  • 优化基于FPGA的深度卷积神经网络的加速器设计

    英文论文链接 http cadlab cs ucla edu cong slides fpga2015 chen pdf 翻译 卜居 转载请注明出处 http blog csdn net kkk584520 article details
  • 【开发工具】WebStorm 前端开发神器菜鸟必备,全网最稳定靠谱的安装教程 一镜到底、全程图文并茂、通俗易懂!

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 介绍 WebStorm号称最智能的前端开发IDE 适用于前端开发和相关技术的集成开发
  • Unity世界坐标转换屏幕坐标(详解)

    我们先通过简单的操作实现一下基础的UI跟随物体移动的功能 首先我们在场景中建立一个Canvas并且添加一个图片作为按钮 之后我们添加一个3d物体作为跟随目标 效果如下图所示 我们配置一下UICanvas的属性 书写对应的自定义类并添加至UI
  • 【QT实战】第三章 将类中的成员函数放在多线程中执行

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • css3平移、旋转、倾斜、缩放、动画效果的实现

    HTML代码 div class button div div class canResize esdrtgyjikodrtgujiokpsedtgyhij div div class transition div ul li li li
  • Unity优化总结(持续更新)

    工欲善其事 必先利其器 优先利用性能分析工具快速找出性能瓶颈 从瓶颈入手分析性能问题产生原因 可以事半功倍 尽量减少占用的内存 资源体积 和CPU 计算量 首先着重减少总量才能更好的进行后续细节的优化 总量降低后 性能依旧有问题 那么可以考
  • SpringBoot主类解析(四)

    SpringBoot主类 import org springframework boot Banner import org springframework boot SpringApplication import org springf
  • 51 Job招聘数据分析与可视化

    招聘数据分析与可视化 背景 为了分析现有数据行业的招聘情况 抓取2017年3月14日到2017年5月13日发布在51Job上的数据相关招聘职位116273条信息 并从中筛选出职位是数据分析 数据挖掘 文本挖掘 视觉学习 计算广告 数据开发
  • Spring-AOP的基本介绍以及通过先动态代理方式实现

    前言 本篇的Spring AOP系类文章第一篇详细的讲解了Spring AOP的介绍以及通过先动态代理在使用AOP由浅入深更容易理解 个人主页 尘觉主页 https blog csdn net apple 67445472 type blo
  • 警告当当成错误 may be used uninitialized in this function [-Werror=maybe-uninitialized]

    如果是ubuntu20版本 或者gcc版本太高 可能有些警告会当成错误导致编译出错 error may be used uninitialized in this function Werror maybe uninitialized cc
  • 1600*C. Binary String Copying

    https codeforces com problemset problem 1849 C Binary String Copying 洛谷 解析 对于某个区间x y 他排序之后 最左侧的连续0和最右侧的连续1是不影响排序结果的 假设左侧
  • Java7大数据结构

    Java数据结构 简书
  • FISCO BCOS 联盟链Pro搭建

    FISCO BCOS Pro版本 版本说明 FISCO BCOS 3 0支持Pro版本微服务区块链架构 Pro版本FISCO BCOS包含RPC服务 Gateway服务和节点服务 每个服务均可独立部署和扩容 本章通过单机搭建Pro版本2节点
  • 目标检测模型设计准则

    转载 https mp weixin qq com s 5SjQvRqRct6ClpE2eEcdkw 设计高效 高质量的表达性网络架构一直是深度学习领域最重要的研究课题 当今的大多数网络设计策略都集中于如何集成从不同层提取的特征 以及如何设
  • windows系统下安装linux(centos7)虚拟机详细教程(virtualbox环境)

    目录 一 概念 1 1 什么是镜像 1 2 关于镜像的基本概念 二 centos镜像下载 2 1 centos官网下载镜像 2 2 通过其他官网下载镜像 三 下载virtualbox 3 1 为什么要使用virtualbox 3 2 下载v
  • 极简java实现理解单例模式核心

    问 单例模式意义 在项目中 有的对象只需要存在一个就足够了 多创建对象则会浪费资源 单例模式可以保证项目对象只存在一个 且不会被多次创建 java实现例子 最少代码 public class Singleton public static
  • ABP模块系统学习及使用

    ABP模块系统简介 参考 ABP中配置的注册和初始化 ABP模块系统 ABP 源码解析 一 ABP启动 ABP框架提供了创建和组装模块的基础 一个模块能够依赖于另一个模块 在通常情况下 一个程序集就可以看成是一个模块 在ABP框架中 一个模