返回总目录


本篇目录

模块介绍###

ABP提供了构建模块并将这些模块组合起来创建应用的基础设施。一个模块可以依赖另一个模块。一般来说,一个程序集可以认为是一个模块。一个模块是由一个派生了AbpModule的类定义的。比如说我们在开发一个可以用在不同的应用中的博客模块。最简单的模块定义如下:

  1. public class MyBlogApplicationModule : AbpModule
  2. {
  3. public override void Initialize()
  4. {
  5. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  6. }
  7. }

ABP扫描所有的程序集,并找出所有的派生自AbpModule基类的类。如果你创建了不止一个程序集的应用,那么建议为每个程序集创建一个模块定义。

生命周期事件###

ABP在应用启动和关闭的时候会调用一些特定的模块方法。你可以重写这些方法来执行特定的任务。

ABP按照依赖的顺序调用这些方法。如果模块A依赖于模块B,那么模块B在模块A之前初始化。方法执行的正确顺序是:PreInitialize-B, PreInitialize-A, Initialize-B, Initialize-A, PostInitialize-B and PostInitialize-A。这对于所有的依赖图都是成立的。Shutdown方法也是类似的,但顺序相反。

PreInitialize

该方法会在应用启动时首先调用。你可以在该方法里面写一些特定的代码,这些代码会在依赖注入注册之前执行。比如,如果你创建了一个传统的注册类,那么你应该把它在这里注册(使用locManager.AddConventionalRegister方法)。你也可以注册到IOC容器的事件...等等。

Initialize

该方法通常是依赖注入注册的地方。一般使用IocManager.RegisterAssemblyByConvention方法完成。如果你想要定义自定义的依赖注册,请看后面的依赖注入文档。

PostInitialize

该方法在应用启动的最后调用。在这里可以安全地解析一个依赖。

Shutdown

该方法在应用关闭的时候调用。

模块依赖###

一个模块可以独立于另一个模块。ABP会自动地尝试解析这些依赖,但是建议通过重写GetDependencies方法来显式声明依赖,正如下面那样:

  1. [DependsOn(typeof(MyBlogCoreModule))]
  2. public class MyBlogApplicationModule : AbpModule
  3. {
  4. public override void Initialize()
  5. {
  6. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  7. }
  8. }

这样,我们声明ABP:MyBlogApplicationModule依赖于MyBlogCoreModule,因而该核心模块MyBlogCoreModule会在应用模块MyBlogApplicationModule之前进行初始化。

自定义模块方法###

你的模块也可以有一些自定义的方法,这些方法可以被依赖于该模块的其他模块所使用。假设MyModule2依赖于MyModule1,且MyModule2想要在PreInitialize事件中调用一个MyModule1的方法。

  1. public class MyModule1 : AbpModule
  2. {
  3. public override void Initialize()
  4. {
  5. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  6. }
  7. public void MyModuleMethod1()
  8. {
  9. //这是该模块的自定义方法
  10. }
  11. }
  12. [DependsOn(typeof(MyModule1))]
  13. public class MyModule2 : AbpModule
  14. {
  15. private readonly MyModule1 _myModule1;
  16. public MyModule2(MyModule1 myModule1)
  17. {
  18. _myModule1 = myModule1;
  19. }
  20. public override void PreInitialize()
  21. {
  22. _myModule1.MyModuleMethod1(); //Call MyModule1's method
  23. }
  24. public override void Initialize()
  25. {
  26. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  27. }
  28. }

这里,我们通过构造函数将MyModule1z注入到了MyModule2,因此MyModule2可以调用MyModule1的自定义方法。

ABP理论学习之模块系统的更多相关文章

  1. ABP理论学习之通知系统

    返回总目录 本篇目录 介绍 订阅通知 发布通知 用户通知管理者 实时通知 通知存储 通知定义 介绍 通知(Notification)用于告知用户系统中的特定事件.ABP提供了基于实时通知基础设施的发布 ...

  2. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  3. abp 模块系统

    abp模块系统:ABP理论学习之模块系统 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是一个模块.一个模块是由一个派生了AbpM ...

  4. ABP(现代ASP.NET样板开发框架)系列之4、ABP模块系统

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  5. ABP框架 - 模块系统

    文档目录 本节内容: 简介 模块定义 生命周期方法 PreInitialize(预初始化) Initialize(初始化) PostInitialize(提交初始化) Shutdown(关闭) 模块依 ...

  6. ABP模块系统

    ABP模块系统 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP ...

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

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

  8. ABP之模块系统

    简介 ASP.NET Boilerplate提供了构建模块的基础结构,并将它们组合在一起以创建应用程序. 模块可以依赖于另一个模块. 通常,一个程序集被视为一个模块. 如果创建具有多个程序集的应用程序 ...

  9. [Abp 源码分析]二、模块系统

    0.简介 整个 Abp 框架由各个模块组成,基本上可以看做一个程序集一个模块,不排除一个程序集有多个模块的可能性.可以看看他官方的这些扩展库: 可以看到每个项目文件下面都会有一个 xxxModule ...

随机推荐

  1. python访问MS SqlServer(通过pyodbc)

    #!/usr/bin/env python # -*- coding: utf-8 -*- import pyodbc class MSSQL: """ 封装pyodbc ...

  2. Tray - a SharedPreferences replacement for Android

    一个代替SharedPreferences的开源库, no Editor, no commit() no apply(),因此不存在UI卡顿现象,并且支持多线程,在一个线程中存另一个线程中取数据. h ...

  3. 谈谈PHP代码规范

    [转] http://www.syyong.com/php/Talk-about-PHP-code-specification.html 我向往这样一个php世界,里面没有代码规范之争.你我都一样,都 ...

  4. 【微信开发】—7200s限制,非数据库

    两种微信缓存方式(7200s) 第一种是MemoryCache(缓存的分享票据) public static string Getjsapi_ticket(string AppID, string A ...

  5. C#解析json文件的方法

    C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...

  6. 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架

    前言 原来一直使用他人的开源项目框架,异常的定位会很麻烦,甚至不知道这个异常来自我的代码还是这个框架本身.他人的框架有一定的制约性,也有可能是我对那些框架并没深入了解,因为这些开源框架在网上也很难找到 ...

  7. tomcat发布脚本

    #!/bin/bash #发布相关目录Tomcat_log='/home/CodePub/tomcatlog'dev_package='/home/CodePub/package'old_packag ...

  8. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  9. React-native之持久化保存----AsyncStorage

    AsyncStorage AsyncStorage是一个简单的,未加密的,异步的,持久化,关键值存储系统,是全局的. iOS中存储类似于NSUserDefault,存储问plist文件存放在设备中. ...

  10. PHP常见的低级错误

    写代码的时候,最讨厌的莫过于因为粗心而范的低级错误了,下面这些,你们是不是也经常犯呢? 1.标点符号缺失,诸如:“$”(美元符),“,”(逗号),“;”(分号),"->"(单 ...