using Bunny.Common;
using Bunny.Common.Connect;
using Bunny.Service.WebSocket;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Bunny.WebApi.Config;
public class BaseConfig
{
///
/// 只要Controller和Service放在 WebApi 项目下即可完成自动注入
/// 遵守这个规则不用再启动类上注入IOC
/// 遵守这个规则在Controller可以使用属性方式注入Service
/// 只要写接口和实现、Controller中正常写即可
///
///
public static void Initialize(WebApplicationBuilder builder)
{
Console.Title = "Bunny Template";
// 注入控制器、服务依赖、Host服务等
builder.AddApplicationController();
builder.AddApplicationServices();
builder.AddApplicationBackendServices();
// 配置
UseConfiguration(builder);
// 使用扩展,第三方如Redis、Minio、SQLSugar
UseExtend(builder);
// 配置跨域
UseCors(builder);
}
private static void UseConfiguration(WebApplicationBuilder builder)
{
// 配置日志相关
// builder.Logging.AddLog4Net("Config/log4net.config");
//配置文件
builder.Services.AddSingleton(new AppSettings(builder.Configuration));
// 添加 SignalR
builder.Services.AddSignalR();
// 让控制器实例由容器创建
builder.Services.Replace(ServiceDescriptor.Transient());
// 如果将Service放在 WebApi同级目录下,可以完成Controller自动注入,不需要写构造函数
builder.Services.Replace(ServiceDescriptor.Transient());
builder.Services.AddControllers().AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter()));
}
///
/// 扩展服务
///
/// WebApplicationBuilder
private static void UseExtend(WebApplicationBuilder builder)
{
// 设置过滤器
FilterConfig.Initialize(builder);
// 初始化Redis
RedisContext.Initial();
// 初始化 Knife4Net文档
Knife4Net.Initialize(builder);
// 启动webSocket
WebSocketInitial.Start();
}
///
/// 配置跨域
///
///
private static void UseCors(IHostApplicationBuilder builder)
{
// SignalR 配置跨域
builder.Services.AddSignalRCore();
// 配置跨域
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policyBuilder => policyBuilder.WithOrigins("*")
.WithHeaders("*")
.WithMethods("*"));
});
}
}