支持表自动迁移 & 优化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>
public static IServiceProvider ServiceProvider => HttpContext?.RequestServices ?? InternalApp.InternalServices.BuildServiceProvider();
public static IServiceProvider ServiceProvider => HttpContext?.RequestServices ?? InternalApp.ServiceProvider;
/// <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>
<PackageReference Include="AspectCore.Abstractions" Version="2.2.0" />
<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="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>

View File

@ -1,6 +1,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
namespace Infrastructure
{
@ -9,12 +10,12 @@ namespace Infrastructure
/// <summary>
/// 应用服务
/// </summary>
public static IServiceCollection InternalServices;
public static IServiceProvider ServiceProvider;
/// <summary>
/// 全局配置构建器
/// </summary>
public static IConfigurationBuilder ConfigurationBuilder;
//public static IConfigurationBuilder ConfigurationBuilder;
/// <summary>
/// 获取Web主机环境
@ -24,6 +25,6 @@ namespace Infrastructure
/// <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.Helper;
using Microsoft.Extensions.Configuration;
using SqlSugar;
using SqlSugar.IOC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using ZR.Admin.WebApi.Framework;
using ZR.Model.System;
@ -24,6 +26,9 @@ namespace ZR.Admin.WebApi.Extensions
//仅本人数据权限
public static string DATA_SCOPE_SELF = "5";
public static void AddDb(IConfiguration Configuration)
{
string connStr = Configuration.GetConnectionString("conn_db");
@ -83,6 +88,18 @@ namespace ZR.Admin.WebApi.Extensions
};
#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>

View File

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

View File

@ -35,7 +35,7 @@ namespace ZR.Admin.WebApi.Extensions
{
//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 = 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();
});
InternalApp.InternalServices = builder.Services;
//InternalApp.InternalServices = builder.Services;
builder.Services.AddAppService();
builder.Services.AddSingleton(new AppSettings(builder.Configuration));
//开启计划任务
@ -81,7 +81,8 @@ builder.Services.AddMvc(options =>
builder.Services.AddSwaggerConfig();
var app = builder.Build();
InternalApp.ServiceProvider = app.Services;
app.Services.InitDb();
app.UseSwagger();
//使可以多次多去body内容

View File

@ -22,15 +22,15 @@
</ItemGroup>
<ItemGroup>
<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.Filters" Version="7.0.2" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.3" />
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="IPTools.China" Version="1.6.0" />
<PackageReference Include="NLog" Version="5.0.0-rc2" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="NLog" Version="5.0.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.0.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="Snowflake.Core" Version="2.0.0" />
</ItemGroup>

View File

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

View File

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

View File

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

View File

@ -5,9 +5,9 @@
</PropertyGroup>
<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="SqlSugarCoreNoDrive" Version="5.0.9" />
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.0.9.1" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
</ItemGroup>

View File

@ -10,11 +10,11 @@
</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="NETCore.Encrypt" Version="2.1.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>

View File

@ -6,7 +6,7 @@
<ItemGroup>
<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.Serialization.Json" Version="3.4.0" />
</ItemGroup>