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