浏览代码

新增服务注入功能

zhontai 2 年之前
父节点
当前提交
33798b5e5d

+ 26 - 1
src/platform/ZhonTai.Admin/Core/HostApp.cs

@@ -46,11 +46,23 @@ using ZhonTai.ApiUI;
 using NLog.Web;
 using Autofac.Extensions.DependencyInjection;
 using Microsoft.AspNetCore.Mvc;
+using ZhonTai.Admin.Core.Startup;
 
 namespace ZhonTai.Admin.Core
 {
     public class HostApp
     {
+        HostAppOptions _hostAppOptions;
+
+        public HostApp()
+        {
+        }
+
+        public HostApp(HostAppOptions hostAppOptions)
+        {
+            _hostAppOptions = hostAppOptions;
+        }
+
         public void Run(string[] args)
         {
             var builder = WebApplication.CreateBuilder(args);
@@ -132,6 +144,15 @@ namespace ZhonTai.Admin.Core
         /// <param name="appConfig"></param>
         private void ConfigureServices(IServiceCollection services, IWebHostEnvironment env, IConfiguration configuration, ConfigHelper configHelper, AppConfig appConfig)
         {
+            var hostAppContext = new HostAppContext()
+            {
+                Services = services,
+                Environment = env,
+                Configuration = configuration
+            };
+
+            _hostAppOptions?.ConfigurePreServices?.Invoke(hostAppContext);
+
             //雪花漂移算法
             YitIdHelper.SetIdGenerator(new IdGeneratorOptions(1) { WorkerIdBitLength = 6 });
 
@@ -157,10 +178,10 @@ namespace ZhonTai.Admin.Core
             //添加数据库
             services.AddDbAsync(env).Wait();
 
-           
             //数据库配置
             var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", env.EnvironmentName);
             services.AddSingleton(dbConfig);
+
             //添加IdleBus单例
             var timeSpan = dbConfig.IdleTime > 0 ? TimeSpan.FromMinutes(dbConfig.IdleTime) : TimeSpan.MaxValue;
             var ib = new IdleBus<IFreeSql>(timeSpan);
@@ -436,6 +457,8 @@ namespace ZhonTai.Admin.Core
 
             services.AddHttpClient();
 
+            _hostAppOptions?.ConfigureServices?.Invoke(hostAppContext);
+
             #region 缓存
 
             var cacheConfig = ConfigHelper.Get<CacheConfig>("cacheconfig", env.EnvironmentName);
@@ -479,6 +502,8 @@ namespace ZhonTai.Admin.Core
                 .Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
                 options.AddAssemblyOptions(assemblies);
             });
+
+            _hostAppOptions?.ConfigurePostServices?.Invoke(hostAppContext);
         }
 
         /// <summary>

+ 28 - 0
src/platform/ZhonTai.Admin/Core/Startup/HostAppContext.cs

@@ -0,0 +1,28 @@
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace ZhonTai.Admin.Core.Startup
+{
+    /// <summary>
+    /// HostApp上下文
+    /// </summary>
+    public class HostAppContext
+    {
+        /// <summary>
+        /// 服务
+        /// </summary>
+        public IServiceCollection Services { get; set; }
+
+        /// <summary>
+        /// 环境
+        /// </summary>
+        public IHostEnvironment Environment { get; set; }
+
+        /// <summary>
+        /// 配置
+        /// </summary>
+        public IConfiguration Configuration { get; set; }
+    }
+
+}

+ 24 - 0
src/platform/ZhonTai.Admin/Core/Startup/HostAppOptions.cs

@@ -0,0 +1,24 @@
+using System;
+namespace ZhonTai.Admin.Core.Startup
+{
+    /// <summary>
+    /// HostApp配置
+    /// </summary>
+    public class HostAppOptions
+    {
+        /// <summary>
+        /// 注入前置服务
+        /// </summary>
+        public Action<HostAppContext> ConfigurePreServices { get; set; }
+
+        /// <summary>
+        /// 注入服务
+        /// </summary>
+        public Action<HostAppContext> ConfigureServices { get; set; }
+
+        /// <summary>
+        /// 注入后置服务
+        /// </summary>
+        public Action<HostAppContext> ConfigurePostServices { get; set; }
+    }
+}

+ 40 - 0
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -1293,6 +1293,46 @@
             <param name="disableGlobalFilterNames">禁用全局过滤器名</param>
             <returns></returns>
         </member>
+        <member name="T:ZhonTai.Admin.Core.Startup.HostAppContext">
+            <summary>
+            HostApp上下文
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppContext.Services">
+            <summary>
+            服务
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppContext.Environment">
+            <summary>
+            环境
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppContext.Configuration">
+            <summary>
+            配置
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Core.Startup.HostAppOptions">
+            <summary>
+            HostApp配置
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.ConfigurePreServices">
+            <summary>
+            注入前置服务
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.ConfigureServices">
+            <summary>
+            注入服务
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.ConfigurePostServices">
+            <summary>
+            注入后置服务
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.Api.ApiEntity">
             <summary>
             接口管理