using Microsoft.AspNetCore.Builder; namespace MAX.Framework.Interfaces { /// /// 业务模块:把「服务注册」和「管道装配」两件事都交给模块自己, /// 由宿主的两行代码统一驱动(模块不需要出现在 Program.cs 里): /// /// builder.AddStoreHub() → 自动发现所有模块并执行 (服务注册阶段,Build() 之前); /// app.UseStoreHubModules() → 自动执行 (管道阶段,Build() 之后、Run() 之前)。 /// /// 模块实例由反射创建,因此实现类必须有无参构造函数。 /// public interface IModule { /// /// 模块执行顺序(数值越大越先执行),默认 。 /// 两个阶段都按这个顺序执行。 /// int Priority => MAX.Core.Interfaces.IntPriority.Normal; /// /// 模块自己的配置文件(相对宿主输出目录 ), /// 例如 "appsettings.CloudProduct.json";默认 null 表示该模块没有独立配置文件。 /// 该文件由 builder.AddStoreHub() 自动并入宿主配置树(插在 appsettings*.json 之后、环境变量/命令行之前), /// 因此模块内的服务照常注入 IConfiguration 就能读到自己的配置节,模块之间互不干扰。 /// 注意:只有 builder.AddStoreHub() 入口能加载模块配置文件, /// 直接用 builder.Services.AddStoreHub() 时拿不到 IConfigurationBuilder,模块配置不会生效。 /// string? ConfigurationFile => null; /// /// 服务注册阶段(builder.Build() 之前):注册本模块的服务、选项、后台任务类型。 /// 需要读配置时用 ,不要再去碰 builder。 /// void AddModule(ModuleContext context); /// /// 管道装配阶段(builder.Build() 之后、app.Run() 之前): /// 注册中间件(如 Hangfire 看板)、Map 端点、读取 解析服务、注册启动任务等。 /// 不需要管道装配的模块可以不实现(默认空实现)。 /// void UseModule(WebApplication app) { } } }