每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自的类,如下所示:
配置依赖注入和其他模块
ConfigureServices方法
ConfigureServices
是将你的服务添加到依赖注入系统并配置其他模块的主要方法.例:
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
//...
}
}
你可以按照Microsoft的文档中的说明逐个注册依赖项.但ABP有一个依照约定的依赖注册系统,可以自动注册程序集中的所有服务.有关依赖项注入系统的更多信息,请参阅文档.
你也可以通过这种方式配置其他服务和模块.例:
配置服务前和后
AbpModule
类还定义了PreConfigureServices
和PostConfigureServices
方法用来在ConfigureServices
之前或之后覆盖和编写你的代码.请注意,在这些方法中编写的代码将在所有其他模块的ConfigureServices
方法之前/之后执行.
应用程序初始化
一旦配置了所有模块的所有服务,应用程序就会通过初始化所有模块来启动.在此阶段,你可以从中获取服务,因为这时它已准备就绪且可用.
OnApplicationInitialization方法
你可以在启动应用程序时覆盖OnApplicationInitialization
方法来执行代码.例:
public class BlogModule : AbpModule
{
//...
public override void OnApplicationInitialization(ApplicationInitializationContext context)
var myService = context.ServiceProvider.GetService<MyService>();
myService.DoSomething();
}
}
OnApplicationInitialization
通常由启动模块用于构建ASP.NET Core应用程序的中间件管道.例:
应用程序初始化前和后
AbpModule
类还定义了和OnPostApplicationInitialization
方法用来在OnApplicationInitialization
之前或之后覆盖和编写你的代码.请注意,在这些方法中编写的代码将在所有其他模块的OnApplicationInitialization
方法之前/之后执行.
应用程序关闭
最后,如果要在应用程序关闭时执行某些代码,你可以覆盖OnApplicationShutdown
方法.
在模块化应用程序中,一个模块依赖于另一个或几个模块并不罕见.如果一个Abp模块依赖于另一个模块,它必须声明[DependsOn]
特性,如下所示:
[DependsOn(typeof(AbpAspNetCoreMvcModule))]
[DependsOn(typeof(AbpAutofacModule))]
public class BlogModule
{
//...
}
你可以根据需要使用多个DependsOn
特性或将多个模块类型传递给单个DependsOn
特性.
框架模块 vs 应用程序模块
模块分为两种类型. 这两种类型并没有任何结构上的区别,只是按功能和用途分类:
- 框架模块: 这些是框架的核心模块 如缓存, 邮件, 主题, 安全, 序列化, 验证, EF Core集成, MongoDB集成… 等. 它们没有应用/业务功能,它们提供了日常开发经常用到的通用基础设施,集成和抽象.