using Bunny.Common; 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"; // 注入服务依赖 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 // RedisTemplate.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("*")); }); } }