private static void ConvenientRegisterFor <TDenpendencyInterface>(IServiceCollection services, RegisteType registeType, Type[] allTypes, params string[] suffixList) { var scopedDependency = allTypes .Where(t => !t.GetTypeInfo().IsAbstract&& t.GetInterfaces().SingleOrDefault(x => x == typeof(TDenpendencyInterface)) != null) .ToList(); foreach (var item in scopedDependency) { var typeName = item.GetTypeInfo().Name; suffixList.ToList().ForEach(suffix => { var interfaceList = item.GetInterfaces() .Where(x => x.GetTypeInfo().Name.EndsWith(suffix) && !x.GetTypeInfo().Name.Contains("Base")) .Except(item.BaseType?.GetInterfaces()) .ToList(); switch (registeType) { case RegisteType.Scoped: foreach (var interfaceType in interfaceList) { services.AddScoped(interfaceType, item); } services.AddScoped(item); break; case RegisteType.Signalton: foreach (var interfaceType in interfaceList) { services.AddSingleton(interfaceType, item); } services.AddSingleton(item); break; case RegisteType.Transist: foreach (var interfaceType in interfaceList) { services.AddTransient(interfaceType, item); } services.AddTransient(item); break; default: throw new ArgumentOutOfRangeException(nameof(registeType), registeType, null); } }); } }
private static void ConvenientRegisterSelf <TDenpendencyInterface>(IServiceCollection services, RegisteType registeType, Type[] allTypes) { var scopedDependency = allTypes .Where(t => !t.GetTypeInfo().IsAbstract&& t.GetInterfaces().SingleOrDefault(x => x == typeof(TDenpendencyInterface)) != null) .ToList(); foreach (var item in scopedDependency) { var typeName = item.GetTypeInfo().Name; switch (registeType) { case RegisteType.Scoped: services.AddScoped(item); break; case RegisteType.Signalton: services.AddSingleton(item); break; case RegisteType.Transist: services.AddTransient(item); break; default: throw new ArgumentOutOfRangeException(nameof(registeType), registeType, null); } } }