简化startup

This commit is contained in:
2023-03-28 15:29:09 +08:00
parent 847a858d4c
commit d636034f06
10 changed files with 221 additions and 173 deletions

View File

@@ -0,0 +1,56 @@
using JNPF;
using JNPF.Common.Options;
using JNPF.EventHandler;
using OnceMi.AspNetCore.OSS;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// OSS服务配置拓展.
/// </summary>
public static class ConfigureEventBusExtensions
{
/// <summary>
/// OSS服务配置.
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection ConfigureEventBus(this IServiceCollection services)
{
// 注册EventBus服务
services.AddEventBus(options =>
{
//// 创建连接工厂
//var factory = new RabbitMQ.Client.ConnectionFactory
//{
// // 设置主机名
// HostName = "192.168.0.232",
// // 用户名
// UserName = "jnpf",
// // 密码
// Password = "jnpf@2019",
//};
//// 创建默认内存通道事件源对象可自定义队列路由key比如这里是 eventbus
//var rbmqEventSourceStorer = new RabbitMQEventSourceStorer(factory, "eventbus", 3000);
//// 替换默认事件总线存储器
//options.ReplaceStorer(serviceProvider =>
//{
// return rbmqEventSourceStorer;
//});
options.UseUtcTimestamp = false;
// 不启用事件日志
options.LogEnabled = false;
// 事件执行器(失败重试)
options.AddExecutor<RetryEventHandlerExecutor>();
});
return services;
}
}

View File

@@ -10,11 +10,11 @@ namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// SqlSugar配置拓展.
/// </summary>
public static class LoggingConfigureExtensions
public static class ConfigureLoggingExtensions
{
const string DATEFORMAT = "HH:mm:ss.fff";
public static IServiceCollection LoggingConfigure(this IServiceCollection services)
public static IServiceCollection ConfigureLogging(this IServiceCollection services)
{
services.AddConsoleFormatter(option =>
{

View File

@@ -0,0 +1,77 @@
using JNPF;
using JNPF.Common.Core.Filter;
using JNPF.Common.Options;
using JNPF.EventHandler;
using JNPF.JsonSerialization;
using JNPF.UnifyResult;
using Microsoft.AspNetCore.HttpOverrides;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;
using OnceMi.AspNetCore.OSS;
using JNPF.API.Entry.Handlers;
using JNPF.Common.Cache;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// OSS服务配置拓展.
/// </summary>
public static class ConfigureMvcControllerExtensions
{
/// <summary>
/// OSS服务配置.
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection ConfigureMvcController(this IServiceCollection services)
{
services.AddControllers()
.AddMvcFilter<RequestActionFilter>()
.AddInjectWithUnifyResult<RESTfulResultProvider>()
.AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null)
.AddNewtonsoftJson(options =>
{
// 默认命名规则
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// 设置时区为 UTC
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
// 格式化json输出的日期格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
// 忽略空值
// options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
// 忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// 格式化json输出的日期格式为时间戳
options.SerializerSettings.Converters.Add(new NewtonsoftDateTimeJsonConverter());
});
// 配置Nginx转发获取客户端真实IP
// 注1如果负载均衡不是在本机通过 Loopback 地址转发请求的一定要加上options.KnownNetworks.Clear()和options.KnownProxies.Clear()
// 注2如果设置环境变量 ASPNETCORE_FORWARDEDHEADERS_ENABLED 为 True则不需要下面的配置代码
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
// Jwt处理程序
services.AddJwt<JwtHandler>(enableGlobalAuthorize: true);
// 跨域
services.AddCorsAccessor();
services.AddConfigurableOptions<CacheOptions>();
services.AddSession();
services.AddMemoryCache(); // 使用本地缓存必须添加
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
return services;
}
}

View File

@@ -7,14 +7,14 @@ namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// OSS服务配置拓展.
/// </summary>
public static class OSSServiceConfigureExtensions
public static class ConfigureOSSServiceExtensions
{
/// <summary>
/// OSS服务配置.
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection OSSServiceConfigure(this IServiceCollection services)
public static IServiceCollection ConfigureOSSService(this IServiceCollection services)
{
// 获取选项
OssOptions oss = App.GetConfig<OssOptions>("OSS", true);

View File

@@ -0,0 +1,74 @@
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using JNPF;
using JNPF.DatabaseAccessor;
using JNPF.Logging;
using Spire.Xls;
using SqlSugar;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// SqlSugar配置拓展.
/// </summary>
public static class ConfigureSqlSugarExtensions
{
public static IServiceCollection ConfigureSqlSugar(this IServiceCollection services)
{
// 获取选项
ConnectionStringsOptions conn = App.GetConfig<ConnectionStringsOptions>("ConnectionStrings", true);
List<ConnectionConfig> connectConfigList = new List<ConnectionConfig>();
var DBType = (DbType)Enum.Parse(typeof(DbType), conn.DBType);
// 默认数据库
connectConfigList.Add(new ConnectionConfig
{
ConnectionString = string.Format(conn.DefaultConnection, conn.Host, conn.Port, conn.DBName, conn.UserName, conn.Password),
DbType = DBType,
IsAutoCloseConnection = true,
ConfigId = conn.ConfigId,
InitKeyType = InitKeyType.Attribute,
MoreSettings = new ConnMoreSettings()
{
IsAutoRemoveDataCache = true // 自动清理缓存
},
});
services.AddSqlSugar(connectConfigList, client =>
{
//connectConfigList.ForEach(config =>
//{
// var db = ((SqlSugarScope)client).GetConnectionScope((string)config.ConfigId);
// // 设置超时时间
// db.Ado.CommandTimeOut = 30;
// // 打印SQL语句
// db.Aop.OnLogExecuting = (sql, pars) =>
// {
// var oldColor = Console.ForegroundColor;
// Console.ForegroundColor = ConsoleColor.Green;
// var finalSql = UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, sql, pars);
// Console.WriteLine($"【{DateTime.Now.ToString("HH:mm:ss.fff")}——SQL执行完成】{db.Ado.SqlExecutionTime.TotalMilliseconds} ms");
// Console.WriteLine(finalSql);
// Console.ForegroundColor = oldColor;
// if (db.Ado.SqlExecutionTime.TotalMilliseconds > 3000)
// {
// Log.Warning($"慢查询: {db.Ado.SqlExecutionTime.TotalMilliseconds}ms, SQL: " + finalSql);
// }
// Console.WriteLine();
// };
// db.Aop.OnError = (ex) =>
// {
// Log.Error(UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, ex.Sql, (SugarParameter[])ex.Parametres));
// };
//});
});
services.AddConfigurableOptions<ConnectionStringsOptions>();
services.AddConfigurableOptions<TenantOptions>();
services.AddUnitOfWork<SqlSugarUnitOfWork>();
return services;
}
}

View File

@@ -1,69 +0,0 @@
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using JNPF;
using JNPF.Logging;
using Spire.Xls;
using SqlSugar;
namespace Microsoft.Extensions.DependencyInjection;
/// <summary>
/// SqlSugar配置拓展.
/// </summary>
public static class SqlSugarConfigureExtensions
{
public static IServiceCollection SqlSugarConfigure(this IServiceCollection services)
{
// 获取选项
ConnectionStringsOptions conn = App.GetConfig<ConnectionStringsOptions>("ConnectionStrings", true);
List<ConnectionConfig> connectConfigList = new List<ConnectionConfig>();
var DBType = (DbType)Enum.Parse(typeof(DbType), conn.DBType);
// 默认数据库
connectConfigList.Add(new ConnectionConfig
{
ConnectionString = string.Format(conn.DefaultConnection, conn.Host, conn.Port, conn.DBName, conn.UserName, conn.Password),
DbType = DBType,
IsAutoCloseConnection = true,
ConfigId = conn.ConfigId,
InitKeyType = InitKeyType.Attribute,
MoreSettings = new ConnMoreSettings()
{
IsAutoRemoveDataCache = true // 自动清理缓存
},
});
services.AddSqlSugar(connectConfigList, client =>
{
//connectConfigList.ForEach(config =>
//{
// var db = ((SqlSugarScope)client).GetConnectionScope((string)config.ConfigId);
// // 设置超时时间
// db.Ado.CommandTimeOut = 30;
// // 打印SQL语句
// db.Aop.OnLogExecuting = (sql, pars) =>
// {
// var oldColor = Console.ForegroundColor;
// Console.ForegroundColor = ConsoleColor.Green;
// var finalSql = UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, sql, pars);
// Console.WriteLine($"【{DateTime.Now.ToString("HH:mm:ss.fff")}——SQL执行完成】{db.Ado.SqlExecutionTime.TotalMilliseconds} ms");
// Console.WriteLine(finalSql);
// Console.ForegroundColor = oldColor;
// if (db.Ado.SqlExecutionTime.TotalMilliseconds > 3000)
// {
// Log.Warning($"慢查询: {db.Ado.SqlExecutionTime.TotalMilliseconds}ms, SQL: " + finalSql);
// }
// Console.WriteLine();
// };
// db.Aop.OnError = (ex) =>
// {
// Log.Error(UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, ex.Sql, (SugarParameter[])ex.Parametres));
// };
//});
});
return services;
}
}

View File

@@ -28,92 +28,19 @@ public class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.ConfigureMvcController();
// SqlSugar
services.SqlSugarConfigure();
// Jwt处理程序
services.AddJwt<JwtHandler>(enableGlobalAuthorize: true);
// 跨域
services.AddCorsAccessor();
//services.SqlSugarConfigure();
services.ConfigureSqlSugar();
// 注册EventBus服务
services.AddEventBus(options =>
{
//// 创建连接工厂
//var factory = new RabbitMQ.Client.ConnectionFactory
//{
// // 设置主机名
// HostName = "192.168.0.232",
// // 用户名
// UserName = "jnpf",
// // 密码
// Password = "jnpf@2019",
//};
//// 创建默认内存通道事件源对象可自定义队列路由key比如这里是 eventbus
//var rbmqEventSourceStorer = new RabbitMQEventSourceStorer(factory, "eventbus", 3000);
//// 替换默认事件总线存储器
//options.ReplaceStorer(serviceProvider =>
//{
// return rbmqEventSourceStorer;
//});
options.UseUtcTimestamp = false;
// 不启用事件日志
options.LogEnabled = false;
// 事件执行器(失败重试)
options.AddExecutor<RetryEventHandlerExecutor>();
});
services.ConfigureEventBus();
// 注册远程请求
services.AddRemoteRequest();
services.AddConfigurableOptions<CacheOptions>();
services.AddConfigurableOptions<ConnectionStringsOptions>();
services.AddConfigurableOptions<TenantOptions>();
services.AddControllers()
.AddMvcFilter<RequestActionFilter>()
.AddInjectWithUnifyResult<RESTfulResultProvider>()
.AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null)
.AddNewtonsoftJson(options =>
{
// 默认命名规则
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// 设置时区为 UTC
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
// 格式化json输出的日期格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
// 忽略空值
// options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
// 忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// 格式化json输出的日期格式为时间戳
options.SerializerSettings.Converters.Add(new NewtonsoftDateTimeJsonConverter());
});
// 配置Nginx转发获取客户端真实IP
// 注1如果负载均衡不是在本机通过 Loopback 地址转发请求的一定要加上options.KnownNetworks.Clear()和options.KnownProxies.Clear()
// 注2如果设置环境变量 ASPNETCORE_FORWARDEDHEADERS_ENABLED 为 True则不需要下面的配置代码
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
// 视图引擎
// 视图引擎
services.AddViewEngine();
// 任务调度
@@ -128,16 +55,9 @@ public class Startup : AppStartup
// 微信
services.AddSenparcGlobalServices(App.Configuration) // Senparc.CO2NET 全局注册
.AddSenparcWeixinServices(App.Configuration); // Senparc.Weixin 注册如果使用Senparc.Weixin SDK则添加
services.AddSession();
services.AddMemoryCache(); // 使用本地缓存必须添加
services.LoggingConfigure();
services.AddUnitOfWork<SqlSugarUnitOfWork>();
services.OSSServiceConfigure();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.ConfigureLogging();
services.ConfigureOSSService();
services.AddSchedule();
@@ -153,10 +73,8 @@ public class Startup : AppStartup
app.UseStaticFiles();
#region
IRegisterService register = RegisterService.Start(senparcSetting.Value).UseSenparcGlobal();//启动 CO2NET 全局注册,必须!
register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value);//微信全局注册,必须!
#endregion
app.UseWebSockets();

View File

@@ -1,12 +1,4 @@
{
"AllowedHosts": "*",
// 配置扫描目录
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:5000"
}
}
},
"ConfigurationScanDirectories": [ "Configurations" ]
}

View File

@@ -14,9 +14,9 @@
<PackageReference Include="Aspose.Words" Version="22.4.0" />
<PackageReference Include="CSRedisCore" Version="3.8.3" />
<PackageReference Include="FreeSpire.Office" Version="4.3.1" />
<PackageReference Include="NPOI" Version="2.5.5" />
<PackageReference Include="System.Diagnostics.PerformanceCounter" Version="6.0.0" />
<PackageReference Include="System.Management" Version="6.0.0" />
<PackageReference Include="NPOI" Version="2.5.5" />
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.0" />

View File

@@ -19,7 +19,7 @@
<ItemGroup>
<PackageReference Include="SqlSugarCore" Version="5.1.4.60" />
<PackageReference Include="Tnb.Core" Version="2023.3.24.1010" />
<!--<ProjectReference Include="..\..\..\Tnb.Core\Tnb.Core.csproj" />-->
<!--<ProjectReference Include="..\..\..\Tnb.Core\Tnb.Core\Tnb.Core.csproj" />-->
</ItemGroup>
</Project>