🪞 反射工具
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 渲染。
