反射工具 - Snet Docs

🪞 反射工具

ReflectionOperate 提供运行时的动态 DLL 加载、方法调用和事件注册功能。

ReflectionOperate

var basics = new ReflectionData.Basics
{
    DllDatas = new List<DllData>
    {
        new DllData
        {
            DllPath = "MyParser.dll",
            IsAbsolutePath = false,
            NamespaceDatas = new List<NamespaceData>
            {
                new NamespaceData
                {
                    Namespace = "MyParser",
                    ClassDatas = new List<ClassData>
                    {
                        new ClassData
                        {
                            SN = "parser-1",
                            ClassName = "TemperatureParser",
                            MethodDatas = new List<MethodData>
                            {
                                new MethodData { SN = "parse", MethodName = "ParseTemperature" }
                            }
                        }
                    }
                }
            }
        }
    }
};

var reflect = await ReflectionOperate.InstanceAsync(basics);
reflect.Init();
// 方法容器键 = $"{ClassData.SN}{MethodData.SN}" —— "parser-1" + "parse"
object result = reflect.ExecuteMethod("parser-1parse", new object[] { rawValue });
reflect.Dispose();

配置结构

DllData
  DllPath, IsAbsolutePath
  NamespaceData
    Namespace
    ClassData
      SN, ClassName, ConstructorParam
      MethodData — SN, MethodName, WhetherExecute, MethodParam   // 调用键 = ClassData.SN + MethodData.SN
      EventData  — SN, EventName                                 // 订阅键 = ClassData.SN + EventData.SN

API

方法 描述
Init() 加载 DLL,实例化类,绑定方法/事件
ExecuteMethod(sn, params) 通过组合键调用方法——{ClassData.SN}{MethodData.SN}(容器以 $"{ClassData.SN}{MethodData.SN}" 为键,仅传 MethodData.SN 无法命中)
RegisterEvent(sn, register, ...) 订阅/取消订阅事件——同样按组合键(ClassData.SN + EventData.SN
Dispose() 释放资源

自 26.250.1 起,调用路径会等待 Task / ValueTask(含 ValueTask<T>)返回值:ExecuteMethod(以及 Init 期间 WhetherExecute 标记的方法)会等待异步调用完成并返回其实际结果,而不是 Task 对象。CreateConstructorParam 的参数类型由 IDictionary<string, object?> 改为 ConcurrentDictionary<string, object?>

ParamModel

当在任何操作类上调用 GetArgs() 时,CoreUnify 使用反射自动生成 ParamModel 对象,用于自动 UI 渲染。

另请参阅