using Autofac; using MiAssessment.Core.Interfaces; using MiAssessment.Core.Services; using MiAssessment.Model.Data; using MiAssessment.Model.Models.Auth; using MiAssessment.Model.Models.Payment; using Microsoft.Extensions.Logging; namespace MiAssessment.Infrastructure.Modules; /// /// 服务注册模块 - 用于注册业务服务 /// public class ServiceModule : Module { protected override void Load(ContainerBuilder builder) { // ========== 认证系统服务注册 ========== // 注册 JWT 服务 builder.RegisterType().As().InstancePerLifetimeScope(); // 注册用户服务 builder.RegisterType().As().InstancePerLifetimeScope(); // 注册微信服务 builder.Register(c => { var httpClientFactory = c.Resolve(); var logger = c.Resolve>(); var wechatPaySettings = c.Resolve>(); var redisService = c.Resolve(); var dbContext = c.Resolve(); var adminConfigDbContext = c.Resolve(); return new WechatService(httpClientFactory.CreateClient(), logger, wechatPaySettings, redisService, dbContext, adminConfigDbContext); }).As().InstancePerLifetimeScope(); // 注册 IP 地理位置服务 builder.Register(c => { var httpClientFactory = c.Resolve(); var logger = c.Resolve>(); var amapSettings = c.Resolve(); return new IpLocationService(httpClientFactory.CreateClient(), logger, amapSettings); }).As().InstancePerLifetimeScope(); // 注册认证服务 builder.Register(c => { var dbContext = c.Resolve(); var userService = c.Resolve(); var jwtService = c.Resolve(); var wechatService = c.Resolve(); var ipLocationService = c.Resolve(); var redisService = c.Resolve(); var jwtSettings = c.Resolve(); var logger = c.Resolve>(); return new AuthService(dbContext, userService, jwtService, wechatService, ipLocationService, redisService, jwtSettings, logger); }).As().InstancePerLifetimeScope(); // ========== 用户管理系统服务注册 ========== // 注册地址服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new AddressService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 支付系统服务注册 ========== // 注册微信支付配置服务(从Admin库读取配置) builder.Register(c => { var adminConfigDbContext = c.Resolve(); var redisService = c.Resolve(); var logger = c.Resolve>(); return new WechatPayConfigService(adminConfigDbContext, redisService, logger); }).As().InstancePerLifetimeScope(); // 注册微信支付 V3 服务 builder.Register(c => { var dbContext = c.Resolve(); var httpClientFactory = c.Resolve(); var logger = c.Resolve>(); var configService = c.Resolve(); return new WechatPayV3Service(dbContext, httpClientFactory.CreateClient(), logger, configService); }).As().InstancePerLifetimeScope(); // 注册微信支付服务 (V2),支持版本路由到 V3 builder.Register(c => { var dbContext = c.Resolve(); var httpClientFactory = c.Resolve(); var logger = c.Resolve>(); var configService = c.Resolve(); var wechatService = c.Resolve(); var redisService = c.Resolve(); var settings = c.Resolve>(); var appSettings = c.Resolve(); // Autofac 原生支持 Lazy,直接解析即可 var v3ServiceLazy = c.Resolve>(); return new WechatPayService(dbContext, httpClientFactory.CreateClient(), logger, configService, wechatService, redisService, settings, appSettings, v3ServiceLazy); }).As().InstancePerLifetimeScope(); // 注册支付服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new PaymentService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册支付回调服务 builder.Register(c => { var dbContext = c.Resolve(); var wechatPayService = c.Resolve(); var wechatPayV3Service = c.Resolve(); var wechatPayConfigService = c.Resolve(); var logger = c.Resolve>(); return new PaymentNotifyService(dbContext, wechatPayService, wechatPayV3Service, wechatPayConfigService, logger); }).As().InstancePerLifetimeScope(); // 注册支付订单服务 builder.Register(c => { var dbContext = c.Resolve(); var rewardHandlers = c.Resolve>(); var logger = c.Resolve>(); return new PaymentOrderService(dbContext, rewardHandlers, logger); }).As().InstancePerLifetimeScope(); // 注册奖励分发器 builder.Register(c => { var rewardHandlers = c.Resolve>(); var logger = c.Resolve>(); return new PaymentRewardDispatcher(rewardHandlers, logger); }).As().SingleInstance(); // ========== 奖励处理器注册 ========== // 注册默认奖励处理器(示例) // 实际项目中可以注册多个处理器,每个处理器处理不同的订单类型 // 例如:DiamondRechargeRewardHandler, VipPurchaseRewardHandler 等 builder.Register(c => { var logger = c.Resolve>(); return new DefaultPaymentRewardHandler(logger); }).As().InstancePerLifetimeScope(); // ========== 配置系统服务注册 ========== // 注册配置服务 builder.Register(c => { var dbContext = c.Resolve(); var adminConfigDbContext = c.Resolve(); var logger = c.Resolve>(); var redisService = c.Resolve(); return new ConfigService(dbContext, adminConfigDbContext, logger, redisService); }).As().InstancePerLifetimeScope(); // ========== 小程序首页模块服务注册 ========== // 注册首页服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new HomeService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 小程序测评模块服务注册 ========== // 注册测评服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new AssessmentService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 小程序订单模块服务注册 ========== // 注册订单服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); var wechatPayService = c.Resolve(); return new OrderService(dbContext, logger, wechatPayService); }).As().InstancePerLifetimeScope(); // ========== 小程序业务详情模块服务注册 ========== // 注册业务详情服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new BusinessService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 小程序规划师模块服务注册 ========== // 注册规划师服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new PlannerService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 小程序分销模块服务注册 ========== // 注册分销服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); var wechatService = c.Resolve(); return new InviteService(dbContext, logger, wechatService); }).As().InstancePerLifetimeScope(); // ========== 小程序系统模块服务注册 ========== // 注册系统服务 builder.Register(c => { var configService = c.Resolve(); var logger = c.Resolve>(); return new SystemService(configService, logger); }).As().InstancePerLifetimeScope(); // ========== 小程序团队模块服务注册 ========== // 注册团队服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new TeamService(dbContext, logger); }).As().InstancePerLifetimeScope(); } }