From 6c22045d18e20926d7cc0033a6add99bab1ff7d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A6=20=E8=B5=B5?= <89237069@qq.com> Date: Fri, 30 May 2025 14:50:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API/Wood.Admin.WebApi/Startup.cs | 6 +-- .../RegistService/ServiceRegister.cs | 48 +++++++++++++++++++ .../Controllers/TaskConifgureController.cs | 3 +- 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 API/Wood.Service/Controllers/RegistService/ServiceRegister.cs diff --git a/API/Wood.Admin.WebApi/Startup.cs b/API/Wood.Admin.WebApi/Startup.cs index 6fd6654..03a0a5d 100644 --- a/API/Wood.Admin.WebApi/Startup.cs +++ b/API/Wood.Admin.WebApi/Startup.cs @@ -400,10 +400,10 @@ namespace Wood.Admin.WebApi #endregion }); - services.AddControllers(); - var s = services.BuildServiceProvider().GetRequiredService(); + //services.AddControllers(); + //var s = services.BuildServiceProvider().GetRequiredService(); - s.TaskAllAsync("2025-05-29"); + //s.TaskAllAsync("2025-05-29"); diff --git a/API/Wood.Service/Controllers/RegistService/ServiceRegister.cs b/API/Wood.Service/Controllers/RegistService/ServiceRegister.cs new file mode 100644 index 0000000..4478e61 --- /dev/null +++ b/API/Wood.Service/Controllers/RegistService/ServiceRegister.cs @@ -0,0 +1,48 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace Wood.Service.Controllers.RegistService +{ + public static class ServiceCollectionExtensions + { + // 批量注册接口及其实现类(接口以I开头,实现类与接口同名去掉I) + public static IServiceCollection AddServicesByConvention(this IServiceCollection services, Assembly assembly) + { + var implementationTypes = assembly.GetTypes() + .Where(t => t.IsClass && !t.IsAbstract && !t.IsGenericType); + + foreach (var implementationType in implementationTypes) + { + var interfaces = implementationType.GetInterfaces() + .Where(i => i.Name == "I" + implementationType.Name); + + foreach (var @interface in interfaces) + { + services.AddScoped(@interface, implementationType); + } + } + + return services; + } + + // 批量注册特定接口的所有实现类 + public static IServiceCollection AddImplementationsOf(this IServiceCollection services, Assembly assembly, ServiceLifetime lifetime = ServiceLifetime.Scoped) + { + var interfaceType = typeof(TInterface); + var implementationTypes = assembly.GetTypes() + .Where(t => !t.IsInterface && !t.IsAbstract && interfaceType.IsAssignableFrom(t)); + + foreach (var implementationType in implementationTypes) + { + services.Add(new ServiceDescriptor(interfaceType, implementationType, lifetime)); + } + + return services; + } + } +} diff --git a/API/Wood.Service/Controllers/TaskConifgureController.cs b/API/Wood.Service/Controllers/TaskConifgureController.cs index bc3f779..43d2ab1 100644 --- a/API/Wood.Service/Controllers/TaskConifgureController.cs +++ b/API/Wood.Service/Controllers/TaskConifgureController.cs @@ -68,9 +68,10 @@ namespace TaskManager.Controllers var first = await _context.TaskConifgure.FirstOrDefaultAsync(p => p.TaskName == taskName); var url = first.Url; var path = first.Api; + var client = first.Module; var controller = _builder.GetRequiredService(); - await controller.ExecuteAsync(url, path, taskName); + await controller.ExecuteAsync(url, path, taskName,client); }