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();
}
}