using Microsoft.Extensions.DependencyModel; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace Infrastructure.Helper { public static class AssemblyUtils { /// /// 获取应用中的所有程序集 /// /// public static IEnumerable GetAssemblies() { var compilationLibrary = DependencyContext.Default .CompileLibraries .Where(x => !x.Serviceable && x.Type == "project") .ToList(); return compilationLibrary.Select(p => Assembly.Load(new AssemblyName(p.Name))); } /// /// 获取应用中的所有Type /// /// public static IEnumerable GetAllTypes() { var assemblies = GetAssemblies(); return assemblies.SelectMany(p => p.GetTypes()); } //获取泛型类名 public static Type GetGenericTypeByName(string genericTypeName) { Type type = null; foreach (var assembly in GetAssemblies()) { var baseType = assembly.GetTypes() .FirstOrDefault(t => t.IsGenericType && t.GetGenericTypeDefinition().Name.Equals(genericTypeName, StringComparison.Ordinal)); if (baseType != null) { return baseType?.GetGenericTypeDefinition(); } } return type; } public static bool IsDerivedFromGenericBaseRepository(this Type? type, Type genericBase) { while (type != null && type != typeof(object)) { var cur = type.IsGenericType ? type.GetGenericTypeDefinition() : type; if (genericBase == cur) { return true; } type = type.BaseType; } return false; } } }