mi-assessment/server/MiAssessment/src/MiAssessment.Infrastructure/Modules/ServiceModule.cs
zpc 8489b4300c refactor(config): 统一配置读取架构,运营配置从Admin库读取
- Model层新增AdminConfig实体和AdminConfigReadDbContext(只读连接Admin库)
- API项目新增AdminConnection连接字符串,注册AdminConfigReadDbContext
- Core层ConfigService按key路由:运营配置走Admin库,业务配置走业务库
- WechatPayConfigService改为从Admin库读取支付/小程序配置
- WechatService新增AdminConfigReadDbContext注入,配置读取改为Admin库
- Autofac注册同步更新三个服务的依赖注入
- Admin.Business的AdminConfigService改用AdminConfigDbContext连接Admin库
2026-02-20 15:48:16 +08:00

249 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
/// <summary>
/// 服务注册模块 - 用于注册业务服务
/// </summary>
public class ServiceModule : Module
{
protected override void Load(ContainerBuilder builder)
{
// ========== 认证系统服务注册 ==========
// 注册 JWT 服务
builder.RegisterType<JwtService>().As<IJwtService>().InstancePerLifetimeScope();
// 注册用户服务
builder.RegisterType<UserService>().As<IUserService>().InstancePerLifetimeScope();
// 注册微信服务
builder.Register(c =>
{
var httpClientFactory = c.Resolve<System.Net.Http.IHttpClientFactory>();
var logger = c.Resolve<ILogger<WechatService>>();
var wechatPaySettings = c.Resolve<Microsoft.Extensions.Options.IOptions<WechatPaySettings>>();
var redisService = c.Resolve<IRedisService>();
var dbContext = c.Resolve<MiAssessmentDbContext>();
var adminConfigDbContext = c.Resolve<AdminConfigReadDbContext>();
return new WechatService(httpClientFactory.CreateClient(), logger, wechatPaySettings, redisService, dbContext, adminConfigDbContext);
}).As<IWechatService>().InstancePerLifetimeScope();
// 注册 IP 地理位置服务
builder.Register(c =>
{
var httpClientFactory = c.Resolve<System.Net.Http.IHttpClientFactory>();
var logger = c.Resolve<ILogger<IpLocationService>>();
var amapSettings = c.Resolve<AmapSettings>();
return new IpLocationService(httpClientFactory.CreateClient(), logger, amapSettings);
}).As<IIpLocationService>().InstancePerLifetimeScope();
// 注册认证服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var userService = c.Resolve<IUserService>();
var jwtService = c.Resolve<IJwtService>();
var wechatService = c.Resolve<IWechatService>();
var ipLocationService = c.Resolve<IIpLocationService>();
var redisService = c.Resolve<IRedisService>();
var jwtSettings = c.Resolve<JwtSettings>();
var logger = c.Resolve<ILogger<AuthService>>();
return new AuthService(dbContext, userService, jwtService, wechatService, ipLocationService, redisService, jwtSettings, logger);
}).As<IAuthService>().InstancePerLifetimeScope();
// ========== 用户管理系统服务注册 ==========
// 注册地址服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<AddressService>>();
return new AddressService(dbContext, logger);
}).As<IAddressService>().InstancePerLifetimeScope();
// ========== 支付系统服务注册 ==========
// 注册微信支付配置服务从Admin库读取配置
builder.Register(c =>
{
var adminConfigDbContext = c.Resolve<AdminConfigReadDbContext>();
var redisService = c.Resolve<IRedisService>();
var logger = c.Resolve<ILogger<WechatPayConfigService>>();
return new WechatPayConfigService(adminConfigDbContext, redisService, logger);
}).As<IWechatPayConfigService>().InstancePerLifetimeScope();
// 注册微信支付 V3 服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var httpClientFactory = c.Resolve<System.Net.Http.IHttpClientFactory>();
var logger = c.Resolve<ILogger<WechatPayV3Service>>();
var configService = c.Resolve<IWechatPayConfigService>();
return new WechatPayV3Service(dbContext, httpClientFactory.CreateClient(), logger, configService);
}).As<IWechatPayV3Service>().InstancePerLifetimeScope();
// 注册微信支付服务 (V2),支持版本路由到 V3
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var httpClientFactory = c.Resolve<System.Net.Http.IHttpClientFactory>();
var logger = c.Resolve<ILogger<WechatPayService>>();
var configService = c.Resolve<IWechatPayConfigService>();
var wechatService = c.Resolve<IWechatService>();
var redisService = c.Resolve<IRedisService>();
var settings = c.Resolve<Microsoft.Extensions.Options.IOptions<WechatPaySettings>>();
var appSettings = c.Resolve<AppSettings>();
// Autofac 原生支持 Lazy<T>,直接解析即可
var v3ServiceLazy = c.Resolve<Lazy<IWechatPayV3Service>>();
return new WechatPayService(dbContext, httpClientFactory.CreateClient(), logger, configService, wechatService, redisService, settings, appSettings, v3ServiceLazy);
}).As<IWechatPayService>().InstancePerLifetimeScope();
// 注册支付服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<PaymentService>>();
return new PaymentService(dbContext, logger);
}).As<IPaymentService>().InstancePerLifetimeScope();
// 注册支付回调服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var wechatPayService = c.Resolve<IWechatPayService>();
var wechatPayV3Service = c.Resolve<IWechatPayV3Service>();
var wechatPayConfigService = c.Resolve<IWechatPayConfigService>();
var logger = c.Resolve<ILogger<PaymentNotifyService>>();
return new PaymentNotifyService(dbContext, wechatPayService, wechatPayV3Service, wechatPayConfigService, logger);
}).As<IPaymentNotifyService>().InstancePerLifetimeScope();
// 注册支付订单服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var rewardHandlers = c.Resolve<IEnumerable<IPaymentRewardHandler>>();
var logger = c.Resolve<ILogger<PaymentOrderService>>();
return new PaymentOrderService(dbContext, rewardHandlers, logger);
}).As<IPaymentOrderService>().InstancePerLifetimeScope();
// 注册奖励分发器
builder.Register(c =>
{
var rewardHandlers = c.Resolve<IEnumerable<IPaymentRewardHandler>>();
var logger = c.Resolve<ILogger<PaymentRewardDispatcher>>();
return new PaymentRewardDispatcher(rewardHandlers, logger);
}).As<IPaymentRewardDispatcher>().SingleInstance();
// ========== 奖励处理器注册 ==========
// 注册默认奖励处理器(示例)
// 实际项目中可以注册多个处理器,每个处理器处理不同的订单类型
// 例如DiamondRechargeRewardHandler, VipPurchaseRewardHandler 等
builder.Register(c =>
{
var logger = c.Resolve<ILogger<DefaultPaymentRewardHandler>>();
return new DefaultPaymentRewardHandler(logger);
}).As<IPaymentRewardHandler>().InstancePerLifetimeScope();
// ========== 配置系统服务注册 ==========
// 注册配置服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var adminConfigDbContext = c.Resolve<AdminConfigReadDbContext>();
var logger = c.Resolve<ILogger<ConfigService>>();
var redisService = c.Resolve<IRedisService>();
return new ConfigService(dbContext, adminConfigDbContext, logger, redisService);
}).As<IConfigService>().InstancePerLifetimeScope();
// ========== 小程序首页模块服务注册 ==========
// 注册首页服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<HomeService>>();
return new HomeService(dbContext, logger);
}).As<IHomeService>().InstancePerLifetimeScope();
// ========== 小程序测评模块服务注册 ==========
// 注册测评服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<AssessmentService>>();
return new AssessmentService(dbContext, logger);
}).As<IAssessmentService>().InstancePerLifetimeScope();
// ========== 小程序订单模块服务注册 ==========
// 注册订单服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<OrderService>>();
var wechatPayService = c.Resolve<IWechatPayService>();
return new OrderService(dbContext, logger, wechatPayService);
}).As<Core.Interfaces.IOrderService>().InstancePerLifetimeScope();
// ========== 小程序业务详情模块服务注册 ==========
// 注册业务详情服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<BusinessService>>();
return new BusinessService(dbContext, logger);
}).As<IBusinessService>().InstancePerLifetimeScope();
// ========== 小程序规划师模块服务注册 ==========
// 注册规划师服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<PlannerService>>();
return new PlannerService(dbContext, logger);
}).As<IPlannerService>().InstancePerLifetimeScope();
// ========== 小程序分销模块服务注册 ==========
// 注册分销服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<InviteService>>();
var wechatService = c.Resolve<IWechatService>();
return new InviteService(dbContext, logger, wechatService);
}).As<IInviteService>().InstancePerLifetimeScope();
// ========== 小程序系统模块服务注册 ==========
// 注册系统服务
builder.Register(c =>
{
var configService = c.Resolve<IConfigService>();
var logger = c.Resolve<ILogger<SystemService>>();
return new SystemService(configService, logger);
}).As<ISystemService>().InstancePerLifetimeScope();
// ========== 小程序团队模块服务注册 ==========
// 注册团队服务
builder.Register(c =>
{
var dbContext = c.Resolve<MiAssessmentDbContext>();
var logger = c.Resolve<ILogger<TeamService>>();
return new TeamService(dbContext, logger);
}).As<ITeamService>().InstancePerLifetimeScope();
}
}