CSharp-Single-EFCore/Bunny.WebApi/Config/BaseConfig.cs

93 lines
2.9 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 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
{
/// <summary>
/// 只要Controller和Service放在 WebApi 项目下即可完成自动注入
/// 遵守这个规则不用再启动类上注入IOC
/// 遵守这个规则在Controller可以使用属性方式注入Service
/// 只要写接口和实现、Controller中正常写即可
/// </summary>
/// <param name="builder"></param>
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<IControllerActivator, ServiceBasedControllerActivator>());
// 如果将Service放在 WebApi同级目录下可以完成Controller自动注入不需要写构造函数
builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
builder.Services.AddControllers().AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter()));
}
/// <summary>
/// 扩展服务
/// </summary>
/// <param name="builder">WebApplicationBuilder</param>
private static void UseExtend(WebApplicationBuilder builder)
{
// 设置过滤器
FilterConfig.Initialize(builder);
// 初始化Redis
RedisContext.Initial();
// 初始化 Knife4Net文档
Knife4Net.Initialize(builder);
// 启动webSocket
WebSocketInitial.Start();
}
/// <summary>
/// 配置跨域
/// </summary>
/// <param name="builder"></param>
private static void UseCors(IHostApplicationBuilder builder)
{
// SignalR 配置跨域
builder.Services.AddSignalRCore();
// 配置跨域
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policyBuilder => policyBuilder.WithOrigins("*")
.WithHeaders("*")
.WithMethods("*"));
});
}
}