每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自的类,如下所示:

    配置依赖注入和其他模块

    ConfigureServices方法

    ConfigureServices是将你的服务添加到依赖注入系统并配置其他模块的主要方法.例:

    1. {
    2. public override void ConfigureServices(ServiceConfigurationContext context)
    3. {
    4. //...
    5. }
    6. }

    你可以按照Microsoft的文档中的说明逐个注册依赖项.但ABP有一个依照约定的依赖注册系统,可以自动注册程序集中的所有服务.有关依赖项注入系统的更多信息,请参阅文档.

    你也可以通过这种方式配置其他服务和模块.例:

    配置服务前和后

    AbpModule类还定义了PreConfigureServicesPostConfigureServices方法用来在ConfigureServices之前或之后覆盖和编写你的代码.请注意,在这些方法中编写的代码将在所有其他模块的ConfigureServices方法之前/之后执行.

    应用程序初始化

    一旦配置了所有模块的所有服务,应用程序就会通过初始化所有模块来启动.在此阶段,你可以从中获取服务,因为这时它已准备就绪且可用.

    OnApplicationInitialization方法

    你可以在启动应用程序时覆盖OnApplicationInitialization方法来执行代码.例:

    1. public class BlogModule : AbpModule
    2. {
    3. //...
    4. public override void OnApplicationInitialization(ApplicationInitializationContext context)
    5. var myService = context.ServiceProvider.GetService<MyService>();
    6. myService.DoSomething();
    7. }
    8. }

    OnApplicationInitialization通常由启动模块用于构建ASP.NET Core应用程序的中间件管道.例:

    应用程序初始化前和后

    AbpModule类还定义了和OnPostApplicationInitialization方法用来在OnApplicationInitialization之前或之后覆盖和编写你的代码.请注意,在这些方法中编写的代码将在所有其他模块的OnApplicationInitialization方法之前/之后执行.

    应用程序关闭

    最后,如果要在应用程序关闭时执行某些代码,你可以覆盖OnApplicationShutdown方法.

    在模块化应用程序中,一个模块依赖于另一个或几个模块并不罕见.如果一个Abp模块依赖于另一个模块,它必须声明[DependsOn]特性,如下所示:

    1. [DependsOn(typeof(AbpAspNetCoreMvcModule))]
    2. [DependsOn(typeof(AbpAutofacModule))]
    3. public class BlogModule
    4. {
    5. //...
    6. }

    你可以根据需要使用多个DependsOn特性或将多个模块类型传递给单个DependsOn特性.

    框架模块 vs 应用程序模块

    模块分为两种类型. 这两种类型并没有任何结构上的区别,只是按功能和用途分类:

    • 框架模块: 这些是框架的核心模块 如缓存, 邮件, 主题, 安全, 序列化, 验证, EF Core集成, MongoDB集成… 等. 它们没有应用/业务功能,它们提供了日常开发经常用到的通用基础设施,集成和抽象.