50 lines
2.0 KiB
C#
50 lines
2.0 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using UnityEngine;
|
|
|
|
public static class ProcessExecutor
|
|
{
|
|
public static void ExecuteProcessAddMethods(string selectedProcessName)
|
|
{
|
|
// 获取当前项目中的所有程序集
|
|
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
|
|
|
|
foreach (var assembly in assemblies)
|
|
{
|
|
// 查找每个程序集中的所有类型
|
|
Type[] types = assembly.GetTypes();
|
|
|
|
|
|
foreach (var type in types)
|
|
{
|
|
// // 判断类名是否包含当前选择的流程名称
|
|
if (type.Name.Contains(selectedProcessName))
|
|
{
|
|
// 查找类中所有标记了 ProcessAction 属性的方法
|
|
var methods = type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
|
|
|
|
foreach (var method in methods)
|
|
{
|
|
// 检查方法是否有 ProcessAction 属性
|
|
if (method.GetCustomAttribute<ProcessActionAttribute>() != null)
|
|
{
|
|
// 如果是实例方法,先创建实例再调用
|
|
if (!method.IsStatic)
|
|
{
|
|
var instance = Activator.CreateInstance(type);
|
|
method.Invoke(instance, null);
|
|
Debug.Log($"执行实例方法: {method.Name} 在 {type.FullName}");
|
|
}
|
|
else
|
|
{
|
|
// 如果是静态方法,直接调用
|
|
method.Invoke(null, null);
|
|
Debug.Log($"执行静态方法: {method.Name} 在 {type.FullName}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |