This commit is contained in:
CortexCore
2024-03-31 23:31:00 +08:00
parent e179d2eb53
commit b7b89ee71a
641 changed files with 31286 additions and 22134 deletions

View File

@@ -12,13 +12,14 @@ namespace BITKit
{
public class ReflectionHelper
{
public static BindingFlags Flags => BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
public static InitializationState State = InitializationState.None;
private static Type[] types = Type.EmptyTypes;
private static IEnumerable<MethodInfo> methods = new List<MethodInfo>();
private static IEnumerable<FieldInfo> fields = new List<FieldInfo>();
private readonly static Dictionary<Type, MethodInfo[]> methodsCache = new();
private readonly static Dictionary<Type, FieldInfo[]> fieldsCache = new();
private readonly static Dictionary<Attribute, Attribute[]> attributes = new();
private static readonly Dictionary<Type, MethodInfo[]> methodsCache = new();
private static readonly Dictionary<Type, FieldInfo[]> fieldsCache = new();
private static readonly Dictionary<Attribute, Attribute[]> attributes = new();
public static async Task<IEnumerable<MethodInfo>> GetMethods<Att>() where Att : Attribute
{
await EnsureConfig();
@@ -145,7 +146,7 @@ namespace BITKit
var loadedAssemblies = BITApp.Assemblies.IsValid()
? BITApp.Assemblies
: AppDomain.CurrentDomain.GetAssemblies();
: GetAllAssemblies();
BIT4Log.Log<ReflectionHelper>($"已加载程序集:{loadedAssemblies.Length}个");
var result = new List<Type>();
for (var i = 0; i < loadedAssemblies.Length; i++)
@@ -226,6 +227,23 @@ namespace BITKit
State = InitializationState.Initialized;
BIT4Log.Log<ReflectionHelper>("已完成初始化");
}
private static Assembly[] GetAllAssemblies()
{
return AppDomain.CurrentDomain.GetAssemblies();
//return AppDomain.CurrentDomain.GetReferanceAssemblies().ToArray();
// var assemblies = new List<Assembly>();
// foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
// {
// assemblies.Add(assembly);
// foreach (var assemblyName in assembly.GetReferencedAssemblies())
// {
// assemblies.Add(Assembly.Load(assemblyName));
// }
// }
// return assemblies.Distinct().ToArray();
}
[ExcuteOnStop]
public static void Reload()
{
@@ -237,4 +255,36 @@ namespace BITKit
methodsCache.Clear();
}
}
public static class Extents
{
public static List<Assembly> GetReferanceAssemblies(this AppDomain domain)
{
var list = new List<Assembly>();
domain.GetAssemblies().ForEach(i =>
{
GetReferanceAssemblies(i, list);
});
return list;
}
static void GetReferanceAssemblies(Assembly assembly, List<Assembly> list)
{
assembly.GetReferencedAssemblies().ForEach(i =>
{
try
{
var ass = Assembly.Load(i);
if (!list.Contains(ass))
{
list.Add(ass);
GetReferanceAssemblies(ass, list);
}
}
catch (Exception)
{
// ignored
}
});
}
}
}