using Attribute; using Base; using Services; using System.Reflection; namespace Infrastructure { /// /// App服务注册 /// public static class AppServiceExtensions { /// /// 注册引用程序域中所有有AppService标记的类的服务 /// /// public static void AddAppService(this IServiceCollection services) { // var cls = AppSettings.Get("InjectClass"); // if (cls == null || cls.Length <= 0) // { // throw new Exception("请更新appsettings类"); // } // foreach (var item in cls) // { // Register(services, item); // } //必须注册的service // services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); } private static void Register(IServiceCollection services, string item) { Assembly assembly = Assembly.Load(item); foreach (var type in assembly.GetTypes()) { var serviceAttribute = type.GetCustomAttribute(); if (serviceAttribute != null) { var serviceType = serviceAttribute.ServiceType; //情况1 适用于依赖抽象编程,注意这里只获取第一个 if (serviceType == null && serviceAttribute.InterfaceServiceType) { serviceType = type.GetInterfaces().FirstOrDefault(); } //情况2 不常见特殊情况下才会指定ServiceType,写起来麻烦 if (serviceType == null) { serviceType = type; } switch (serviceAttribute.ServiceLifetime) { case LifeTime.Singleton: services.AddSingleton(serviceType, type); break; case LifeTime.Scoped: services.AddScoped(serviceType, type); break; case LifeTime.Transient: services.AddTransient(serviceType, type); break; default: services.AddTransient(serviceType, type); break; } //System.Console.WriteLine($"注册:{serviceType}"); } } } } }