Tz2/Assets/Framework/ProcessExecutor.cs

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}");
}
}
}
}
}
}
}
}