支持表自动迁移 & 优化ServiceProvider获取 & 包版本升级

This commit is contained in:
SampsonYe 2022-07-01 16:29:02 +08:00
parent 0905956926
commit 4518d7d960
17 changed files with 80 additions and 113 deletions

View File

@ -10,7 +10,7 @@ namespace Infrastructure
/// <summary> /// <summary>
/// 服务提供器 /// 服务提供器
/// </summary> /// </summary>
public static IServiceProvider ServiceProvider => HttpContext?.RequestServices ?? InternalApp.InternalServices.BuildServiceProvider(); public static IServiceProvider ServiceProvider => HttpContext?.RequestServices ?? InternalApp.ServiceProvider;
/// <summary> /// <summary>
/// 获取请求上下文 /// 获取请求上下文
/// </summary> /// </summary>

View File

@ -0,0 +1,36 @@
using Microsoft.Extensions.DependencyModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Infrastructure.Helper
{
public static class AssemblyUtils
{
/// <summary>
/// 获取应用中的所有程序集
/// </summary>
/// <returns></returns>
public static IEnumerable<Assembly> GetAssemblies()
{
var compilationLibrary = DependencyContext.Default
.CompileLibraries
.Where(x => !x.Serviceable && x.Type == "project")
.ToList();
return compilationLibrary.Select(p => Assembly.Load(new AssemblyName(p.Name)));
}
/// <summary>
/// 获取应用中的所有Type
/// </summary>
/// <returns></returns>
public static IEnumerable<Type> GetAllTypes()
{
var assemblies = GetAssemblies();
return assemblies.SelectMany(p => p.GetTypes());
}
}
}

View File

@ -11,6 +11,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="AspectCore.Abstractions" Version="2.2.0" /> <PackageReference Include="AspectCore.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" /> <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup> </ItemGroup>

View File

@ -1,6 +1,7 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using System;
namespace Infrastructure namespace Infrastructure
{ {
@ -9,12 +10,12 @@ namespace Infrastructure
/// <summary> /// <summary>
/// 应用服务 /// 应用服务
/// </summary> /// </summary>
public static IServiceCollection InternalServices; public static IServiceProvider ServiceProvider;
/// <summary> /// <summary>
/// 全局配置构建器 /// 全局配置构建器
/// </summary> /// </summary>
public static IConfigurationBuilder ConfigurationBuilder; //public static IConfigurationBuilder ConfigurationBuilder;
/// <summary> /// <summary>
/// 获取Web主机环境 /// 获取Web主机环境
@ -24,6 +25,6 @@ namespace Infrastructure
/// <summary> /// <summary>
/// 获取泛型主机环境 /// 获取泛型主机环境
/// </summary> /// </summary>
public static IHostEnvironment HostEnvironment; //public static IHostEnvironment HostEnvironment;
} }
} }

View File

@ -1,53 +0,0 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Infrastructure.Startups
{
/// <summary>
/// Program.cs里面的HostBuilder扩展
/// </summary>
public static class HostBuilderExtensions
{
/// <summary>
/// Web 主机注入
/// </summary>
/// <param name="hostBuilder">Web主机构建器</param>
/// <param name="assemblyName">外部程序集名称如果HostingStartup存在多个程序集中可以使用;分隔,比如HostStartupLib;HostStartupLib2</param>
/// <returns>IWebHostBuilder</returns>
public static IWebHostBuilder Init(this IWebHostBuilder hostBuilder, string assemblyName)
{
hostBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, assemblyName);
return hostBuilder;
}
/// <summary>
/// 初始化程序扩展
/// </summary>
/// <param name="builder"></param>
public static void UseAppStartup(this IWebHostBuilder hostBuilder)
{
// 自动装载配置
hostBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
// 存储环境对象
InternalApp.HostEnvironment = (IHostEnvironment)hostingContext.HostingEnvironment;
// 加载配置
//InternalApp.AddConfigureFiles(config, InternalApp.WebHostEnvironment);
});
// 自动注入 AddApp() 服务
hostBuilder.ConfigureServices((services) =>
{
// 注册 Startup 过滤器
//services.AddTransient<IStartupFilter, StartupFilter>();
// 添加全局配置和存储服务提供器
InternalApp.InternalServices = services;
// 初始化应用服务
//services.AddApp();
});
}
}
}

View File

@ -1,36 +0,0 @@
using Infrastructure.Startups;
using Microsoft.AspNetCore.Hosting;
//通过HostingStartup指定要启动的类型
[assembly: HostingStartup(typeof(HostingStartup))]
namespace Infrastructure.Startups
{
public class HostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// 自动装载配置
builder.ConfigureAppConfiguration((hostingContext, config) =>
{
// 存储环境对象
//InternalApp.HostEnvironment = hostingContext.HostingEnvironment;
//InternalApp.HostEnvironment = (Microsoft.Extensions.Hosting.IHostEnvironment)hostingContext.HostingEnvironment;
// 加载配置
//InternalApp.AddConfigureFiles(config, InternalApp.WebHostEnvironment);
InternalApp.ConfigurationBuilder = config;
});
// 自动注入 AddApp() 服务
builder.ConfigureServices(services =>
{
// 注册 Startup 过滤器
//services.AddTransient<IStartupFilter, StartupFilter>();
// 添加全局配置和存储服务提供器
InternalApp.InternalServices = services;
});
}
}
}

View File

@ -1,10 +1,12 @@
using Infrastructure; using Infrastructure;
using Infrastructure.Helper;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using SqlSugar; using SqlSugar;
using SqlSugar.IOC; using SqlSugar.IOC;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection;
using ZR.Admin.WebApi.Framework; using ZR.Admin.WebApi.Framework;
using ZR.Model.System; using ZR.Model.System;
@ -24,6 +26,9 @@ namespace ZR.Admin.WebApi.Extensions
//仅本人数据权限 //仅本人数据权限
public static string DATA_SCOPE_SELF = "5"; public static string DATA_SCOPE_SELF = "5";
public static void AddDb(IConfiguration Configuration) public static void AddDb(IConfiguration Configuration)
{ {
string connStr = Configuration.GetConnectionString("conn_db"); string connStr = Configuration.GetConnectionString("conn_db");
@ -83,6 +88,18 @@ namespace ZR.Admin.WebApi.Extensions
}; };
#endregion #endregion
}); });
}
public static void InitDb(this IServiceProvider service)
{
var db = DbScoped.SugarScope;
db.DbMaintenance.CreateDatabase();
//db.CodeFirst.
var baseType = typeof(SysBase);
var entityes = AssemblyUtils.GetAllTypes().Where(p => !p.IsAbstract && p != baseType && /*p.IsAssignableTo(baseType) && */p.GetCustomAttribute<SugarTable>()!=null).ToArray();
db.CodeFirst.SetStringDefaultLength(512).InitTables(entityes);
} }
/// <summary> /// <summary>

View File

@ -39,7 +39,7 @@ namespace ZR.Admin.WebApi.Extensions
public static void AddSwaggerConfig(this IServiceCollection services) public static void AddSwaggerConfig(this IServiceCollection services)
{ {
if (services == null) throw new ArgumentNullException(nameof(services)); if (services == null) throw new ArgumentNullException(nameof(services));
IWebHostEnvironment hostEnvironment = App.GetRequiredService<IWebHostEnvironment>(); //IWebHostEnvironment hostEnvironment = App.GetRequiredService<IWebHostEnvironment>();
services.AddSwaggerGen(c => services.AddSwaggerGen(c =>
{ {
@ -52,7 +52,7 @@ namespace ZR.Admin.WebApi.Extensions
try try
{ {
//添加文档注释 //添加文档注释
c.IncludeXmlComments(Path.Combine(hostEnvironment.ContentRootPath, "ZRAdmin.xml"), true); c.IncludeXmlComments("ZRAdmin.xml", true);
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -35,7 +35,7 @@ namespace ZR.Admin.WebApi.Extensions
{ {
//var _tasksQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService)); //var _tasksQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService));
ITaskSchedulerServer _schedulerServer = App.GetRequiredService<ITaskSchedulerServer>(); ITaskSchedulerServer _schedulerServer = app.ApplicationServices.GetRequiredService<ITaskSchedulerServer>();
//var tasks = _tasksQzService.GetList(m => m.IsStart); //var tasks = _tasksQzService.GetList(m => m.IsStart);
var tasks = SqlSugar.IOC.DbScoped.SugarScope.Queryable<Model.System.SysTasksQz>().Where(m => m.IsStart).ToList(); var tasks = SqlSugar.IOC.DbScoped.SugarScope.Queryable<Model.System.SysTasksQz>().Where(m => m.IsStart).ToList();

View File

@ -55,7 +55,7 @@ builder.Services.AddAuthentication(options =>
o.TokenValidationParameters = JwtUtil.ValidParameters(); o.TokenValidationParameters = JwtUtil.ValidParameters();
}); });
InternalApp.InternalServices = builder.Services; //InternalApp.InternalServices = builder.Services;
builder.Services.AddAppService(); builder.Services.AddAppService();
builder.Services.AddSingleton(new AppSettings(builder.Configuration)); builder.Services.AddSingleton(new AppSettings(builder.Configuration));
//开启计划任务 //开启计划任务
@ -81,7 +81,8 @@ builder.Services.AddMvc(options =>
builder.Services.AddSwaggerConfig(); builder.Services.AddSwaggerConfig();
var app = builder.Build(); var app = builder.Build();
InternalApp.ServiceProvider = app.Services;
app.Services.InitDb();
app.UseSwagger(); app.UseSwagger();
//使可以多次多去body内容 //使可以多次多去body内容

View File

@ -22,15 +22,15 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" /> <PackageReference Include="AspNetCoreRateLimit" Version="4.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.5" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.6" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.2" /> <PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.3" />
<PackageReference Include="UAParser" Version="3.1.47" /> <PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="IPTools.China" Version="1.6.0" /> <PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="NLog" Version="5.0.0-rc2" /> <PackageReference Include="NLog" Version="5.0.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" /> <PackageReference Include="NLog.Web.AspNetCore" Version="5.0.0" />
<PackageReference Include="Mapster" Version="7.3.0" /> <PackageReference Include="Mapster" Version="7.3.0" />
<PackageReference Include="EPPlus" Version="6.0.4" /> <PackageReference Include="EPPlus" Version="6.0.5" />
<PackageReference Include="Hei.Captcha" Version="0.3.0" /> <PackageReference Include="Hei.Captcha" Version="0.3.0" />
<PackageReference Include="Snowflake.Core" Version="2.0.0" /> <PackageReference Include="Snowflake.Core" Version="2.0.0" />
</ItemGroup> </ItemGroup>

View File

@ -12,6 +12,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="JinianNet.JNTemplate" Version="2.3.0" /> <PackageReference Include="JinianNet.JNTemplate" Version="2.3.0" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -6,9 +6,9 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" /> <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="CSRedisCore" Version="3.6.9" /> <PackageReference Include="CSRedisCore" Version="3.8.3" />
<PackageReference Include="EPPlus" Version="6.0.4" /> <PackageReference Include="EPPlus" Version="6.0.5" />
<PackageReference Include="MailKit" Version="3.1.1" /> <PackageReference Include="MailKit" Version="3.3.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
</ItemGroup> </ItemGroup>

View File

@ -72,7 +72,7 @@ namespace ZR.Model.System.Generate
/// <summary> /// <summary>
/// 其他生成选项 /// 其他生成选项
/// </summary> /// </summary>
[SqlSugar.SugarColumn(IsJson = true)] [SqlSugar.SugarColumn(IsJson = true, ColumnDataType = "nvarchar(4000)")]
public Options Options { get; set; } public Options Options { get; set; }
#region #region

View File

@ -5,9 +5,9 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="EPPlus" Version="6.0.4" /> <PackageReference Include="EPPlus" Version="6.0.5" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9.1" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup> </ItemGroup>

View File

@ -10,11 +10,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Options" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
<PackageReference Include="MySql.Data" Version="8.0.29" /> <PackageReference Include="MySql.Data" Version="8.0.29" />
<PackageReference Include="NETCore.Encrypt" Version="2.1.0" /> <PackageReference Include="NETCore.Encrypt" Version="2.1.0" />
<PackageReference Include="SqlSugar.IOC" Version="1.8.0" /> <PackageReference Include="SqlSugar.IOC" Version="1.8.0" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9" /> <PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -6,7 +6,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
<PackageReference Include="NLog" Version="5.0.0-rc2" /> <PackageReference Include="NLog" Version="5.0.1" />
<PackageReference Include="Quartz" Version="3.4.0" /> <PackageReference Include="Quartz" Version="3.4.0" />
<PackageReference Include="Quartz.Serialization.Json" Version="3.4.0" /> <PackageReference Include="Quartz.Serialization.Json" Version="3.4.0" />
</ItemGroup> </ItemGroup>