用途
本技能用于指导开发者使用 ASP.NET Boilerplate(ABP)框架进行模块化开发。ABP 是一个开源应用框架,提供构建模块并将模块组合成应用的基础设施,其模块系统聚焦于服务端开发。技能的目标是帮助开发者按照 ABP 约定与最佳实践创建、配置和维护 ABP 模块。
技术栈
- 框架:ASP.NET Boilerplate
- .NET 版本:兼容 .NET Framework 与 .NET Core
- 模块系统:AbpModule 基类
- 依赖注入:Castle Windsor
- 架构:N 层架构
主要能力
模块定义
模块通过派生自 AbpModule 的类定义,并在 Initialize 中调用 IocManager.RegisterAssemblyByConvention 完成约定注册。使用 DependsOn 特性声明模块依赖,可声明单个或多个依赖。
模块生命周期方法
ABP 在应用启动和关闭时调用特定方法:
- PreInitialize:应用启动时最先调用,用于在模块初始化前配置框架和其他模块、注册约定注册类、在依赖注入注册之前编写代码。
- Initialize:进行依赖注入注册的位置。
- PostInitialize:启动过程中最后调用,可安全解析依赖。
- Shutdown:应用关闭时调用,用于清理资源。
生命周期顺序(模块 A 依赖 B):启动为 PreInitialize-B → PreInitialize-A → Initialize-B → Initialize-A → PostInitialize-B → PostInitialize-A;关闭为 Shutdown-A → Shutdown-B。
常用 ABP 模块
- AbpKernelModule:核心模块,提供依赖注入、事件总线、日志、配置、本地化等基础基础设施。
- AbpAutoMapperModule:基于 AutoMapper 的对象到对象映射。
- AbpEntityFrameworkModule:Entity Framework 集成。
- AbpZeroCoreModule:Module Zero 核心,提供多租户、授权、用户、角色能力。
模块配置
可定义模块设置类,通过 Configuration.Settings.Providers.Add 添加设置提供器,并实现 SettingProvider 的 GetSettingDefinitions 返回 SettingDefinition(可指定作用域,如 Application、Tenant)。
依赖注入
- 约定注册:RegisterAssemblyByConvention 会自动将 ITransientDependency 注册为 transient、ISingletonDependency 注册为 singleton、IScopedDependency 注册为 scoped。
- 手动注册:使用 IocManager.Register 指定 DependencyLifeStyle。
- 拦截器:可在 PreInitialize 中订阅 IocContainer.Kernel.ComponentRegistered,为满足条件的实现添加拦截器(如 AuthorizationInterceptor)。
插件模块
支持动态模块加载:ASP.NET Core 中通过 services.AddAbp 的 options.PlugInSources.AddFolder 添加插件目录;ASP.NET MVC 中通过 AbpBootstrapper.PlugInSources.AddFolder 添加,并可使用 AddToBuildManager 支持插件中的控制器。
自定义模块方法
模块可定义自定义方法供其他模块调用;依赖模块可通过构造函数注入被依赖模块实例并在 PreInitialize 中调用其方法。
附加程序集
可重写 GetAdditionalAssemblies 以包含额外程序集。
常见模块模式
- 数据访问模块:依赖 AbpEntityFrameworkModule,在 PreInitialize 中配置连接字符串与 DbContext。
- 应用服务模块:依赖 AbpKernelModule 与 AbpAutoMapperModule,配置 AutoMapper 映射。
- Web 模块:依赖 AbpAspNetCoreModule。
使用方式
本技能以专家指导形式提供,内容为 ABP 模块开发的约定、代码示例与模式说明。开发者可参照其中的模块定义、生命周期、依赖声明、配置与依赖注入示例编写代码。技能中给出的代码示例可直接参考,但需结合具体项目调整。
适用场景
- 基于 ABP 构建模块化服务端应用
- 需要按 ABP 约定组织模块依赖与生命周期
- 需要配置模块设置、依赖注入与拦截器
- 需要实现插件式动态模块加载
- 需要排查模块未找到、依赖注入不生效、配置未应用、生命周期问题等常见故障
限制
资料未提供该技能的安装命令、收费方式、价格、平台支持范围或效果保证等信息,暂未提供。技能内容聚焦服务端模块系统,未涉及客户端或前端模块化开发的说明。