using Autofac;
using Autofac.Extensions.DependencyInjection;
using Bunny.Common;
using Bunny.Common.Context.Middleware;
using Bunny.Service.WebSocket;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Bunny.WebApi.Configuration;
public class BaseConfig(WebApplicationBuilder builder)
{
///
/// 初始化
///
public void Initialize()
{
// 配置跨域
UseCors();
// 配置日志相关
builder.Logging.AddLog4Net("Configuration/log4net.config");
// 添加 ASP.NET 自带缓存
builder.Services.AddMemoryCache();
// 自定义时间格式
builder.Services.AddControllers().AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter()));
// 添加使用自定义配置文件
builder.Services.AddSingleton(new AppSettings(builder.Configuration));
builder.WebHost.ConfigureKestrel((_, options) =>
{
// 设置文件最大上传大小
options.Limits.MaxRequestBodySize = 1024 * 1024 * 100;
});
// 使用 AddAutofac 注册服务
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer(AddAutofacConfig.BuildContainer);
// 让控制器实例由容器创建
builder.Services.Replace(ServiceDescriptor.Transient());
// 添加定时任务
builder.AddApplicationBackendServices();
// 设置过滤器
builder.AddFilterConfigInitialize();
// 初始化Redis
builder.AddRedisContext();
// 初始化Minio
builder.AddMinioContext();
// 初始化 Knife4Net 文档
builder.AddKnife4Net();
// 启动 webSocket
builder.AddWebSocketInitial();
// 添加验证码
builder.AddCaptcha();
}
///
/// 配置跨域
///
private void UseCors()
{
// SignalR 配置跨域
builder.Services.AddSignalRCore();
// 配置跨域
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policyBuilder => policyBuilder.WithOrigins("*")
.WithHeaders("*")
.WithMethods("*"));
});
}
}