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; } } }