using Autofac; using HoneyBox.Core.Interfaces; using HoneyBox.Core.Services; using HoneyBox.Model.Data; using HoneyBox.Model.Models.Auth; using HoneyBox.Model.Models.Payment; using Microsoft.Extensions.Logging; namespace HoneyBox.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 wechatSettings = c.Resolve(); var wechatPaySettings = c.Resolve>(); var redisService = c.Resolve(); var dbContext = c.Resolve(); return new WechatService(httpClientFactory.CreateClient(), logger, wechatSettings, wechatPaySettings, redisService, dbContext); }).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(); // 注册资产服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new AssetService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册VIP服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new VipService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册优惠券服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new CouponService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册任务服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new TaskService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册推荐服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new InvitationService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册排行榜服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new RankService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册兑换码服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new RedeemService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册福利屋服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new WelfareService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 商品系统服务注册 ========== // 注册商品缓存服务 builder.Register(c => { var redisService = c.Resolve(); var logger = c.Resolve>(); return new GoodsCacheService(redisService, logger); }).As().InstancePerLifetimeScope(); // 注册商品服务 builder.Register(c => { var dbContext = c.Resolve(); var cacheService = c.Resolve(); var logger = c.Resolve>(); return new GoodsService(dbContext, cacheService, logger); }).As().InstancePerLifetimeScope(); // 注册收藏服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); var redisService = c.Resolve(); return new CollectionService(dbContext, logger, redisService); }).As().InstancePerLifetimeScope(); // 注册奖品服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new PrizeService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 抽奖系统服务注册 ========== // 注册库存管理服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new InventoryManager(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册奖励发放服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new RewardService(dbContext, logger); }).As().InstancePerLifetimeScope(); // 注册抽奖引擎服务 builder.Register(c => { var dbContext = c.Resolve(); var inventoryManager = c.Resolve(); var rewardService = c.Resolve(); var logger = c.Resolve>(); return new LotteryEngine(dbContext, inventoryManager, rewardService, logger); }).As().InstancePerLifetimeScope(); // 注册抽奖服务 builder.Register(c => { var dbContext = c.Resolve(); var lotteryEngine = c.Resolve(); var logger = c.Resolve>(); return new LotteryService(dbContext, lotteryEngine, logger); }).As().InstancePerLifetimeScope(); // ========== 订单系统服务注册 ========== // 注册物流服务 builder.Register(c => { var dbContext = c.Resolve(); var httpClientFactory = c.Resolve(); var logger = c.Resolve>(); return new LogisticsService(dbContext, httpClientFactory.CreateClient(), logger); }).As().InstancePerLifetimeScope(); // 注册订单服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); var lotteryEngine = c.Resolve(); return new OrderService(dbContext, logger, lotteryEngine); }).As().InstancePerLifetimeScope(); // 注册仓库服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); var logisticsService = c.Resolve(); var wechatService = c.Resolve(); return new WarehouseService(dbContext, logger, logisticsService, wechatService); }).As().InstancePerLifetimeScope(); // ========== 支付系统服务注册 ========== // 注册微信支付配置服务 builder.RegisterType().As().InstancePerLifetimeScope(); // 注册微信支付服务 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>(); return new WechatPayService(dbContext, httpClientFactory.CreateClient(), logger, configService, wechatService, redisService, settings); }).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 paymentService = c.Resolve(); var lotteryEngine = c.Resolve(); var logger = c.Resolve>(); return new PaymentNotifyService(dbContext, wechatPayService, wechatPayV3Service, wechatPayConfigService, paymentService, lotteryEngine, logger); }).As().InstancePerLifetimeScope(); // 注册充值服务 builder.Register(c => { var dbContext = c.Resolve(); var wechatPayService = c.Resolve(); var paymentService = c.Resolve(); var logger = c.Resolve>(); return new RechargeService(dbContext, wechatPayService, paymentService, logger); }).As().InstancePerLifetimeScope(); // ========== 配置系统服务注册 ========== // 注册配置服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); var redisService = c.Resolve(); return new ConfigService(dbContext, logger, redisService); }).As().InstancePerLifetimeScope(); // 注册悬浮球服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new FloatBallService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 签到系统服务注册 ========== // 注册签到服务 builder.Register(c => { var dbContext = c.Resolve(); var redisService = c.Resolve(); var logger = c.Resolve>(); return new SignService(dbContext, redisService, logger); }).As().InstancePerLifetimeScope(); // ========== 权益系统服务注册 ========== // 注册权益服务 builder.Register(c => { var dbContext = c.Resolve(); var logger = c.Resolve>(); return new QuanYiService(dbContext, logger); }).As().InstancePerLifetimeScope(); // ========== 商城系统服务注册 ========== // 注册商城服务 builder.Register(c => { var dbContext = c.Resolve(); var wechatPayService = c.Resolve(); var logger = c.Resolve>(); return new MallService(dbContext, wechatPayService, logger); }).As().InstancePerLifetimeScope(); } }