我有一个库,允许开发人员通过 JavaScript 扩展业务规则触发器。基本上,有一个函数允许开发人员(在 JavaScript 中)订阅事件并将委托作为“发生这种情况时给我打电话”传递。
我能够成功地做到这一点,但是当函数尝试将 JSON 或 JavaScript 对象传回 C# 层时遇到了障碍。
基本上像这个单元测试这样的代码功能:
Func<String, JsValue> callback = null;
Func<Func<String, JsValue>, object> registerCallback = (o) => callback = o;
Engine engine = new Engine()
.SetValue("registerCallback", registerCallback)
.Execute("registerCallback(function(parameter) { return { \"passed\": parameter }; });");
Assert.IsNotNull(callback);
var result = callback("test");
我希望 C# 变量“结果”可以有一个 JsValue 或其他包含数据的对象,但是该方法抛出异常:必须在最后一行实现 IConvertable。
我可以验证“回调”是否设置为适当类型的委托: Jint.Native.JsValue lambda_method(System.Runtime.CompilerServices.Closure, System.String)}
如果我传回 NULL,我就没有问题。我敢肯定有一些微小的(一旦我弄清楚了)丢失了一块......