.net5 根據型別注入所有的繼承關係
阿新 • • 發佈:2022-04-13
//所有的service繼承一個公共的介面,根據這個公共介面進行注入
//未處理泛型,所以此處的型別需要使用公共介面
public class RepositoryDIFactory { private static RepositoryDIFactory data; public static RepositoryDIFactory Instance = data ?? (data = new RepositoryDIFactory()); /// <summary> /// /// </summary> /// <param name="service"></param> /// <param name="baseType"></param> public void Inject(IServiceCollection service,Type baseType) { //根據type型別載入不同倉儲 var assembly = GetAssemblyList(); foreach (var item in assembly) { foreach (Type type in item.GetTypes()) { if (baseType.IsAssignableFrom(type) && type.IsClass && !type.IsAbstract) { Type[] interfaces = type.GetInterfaces(); foreach (Type i in interfaces) { if (!i.IsGenericType && i != baseType && i.Name != baseType.Name) { service.AddScoped(i, type); test.Add(i.Name, type.Name); } } } } } } }