如何为C# ClearScript V8ScriptEngine添加静态函数?
为V8ScriptEngine添加全局静态函数的实现方案
直接通过SetValue注入委托
ClearScript的V8ScriptEngine支持直接将.NET委托作为全局函数注入,和你在Jint中的用法逻辑一致,示例代码如下:
// 示例1:直接传入已定义的委托 Action<string> printLog = Console.WriteLine; _engine.SetValue("print", printLog); // 示例2:绑定静态方法生成委托后注入 var targetMethod = typeof(Console).GetMethod("WriteLine", new[] { typeof(string) }); var methodDelegate = Delegate.CreateDelegate(typeof(Action<string>), targetMethod); _engine.SetValue("consolePrint", methodDelegate);
注入完成后,即可在JavaScript中直接调用:
print("测试日志"); consolePrint("通过静态方法绑定的输出");
使用AddHostFunction快速绑定
如果需要快速创建并绑定函数逻辑,可以用AddHostFunction方法,直接传入匿名委托实现:
// 绑定一个求和函数 _engine.AddHostFunction("sum", new Func<int, int, int>((a, b) => a + b)); // 绑定无参返回值函数 _engine.AddHostFunction("getCurrentTime", new Func<DateTime>(() => DateTime.Now));
暴露静态类实现批量静态方法调用
如果你的静态函数属于某个.NET静态类,也可以直接将整个类暴露给JavaScript环境,这样就能直接调用类中的所有静态方法:
// 假设存在自定义静态类MyToolkit _engine.AddHostType("Toolkit", typeof(MyToolkit));
在JavaScript中调用方式:
const result = Toolkit.CalculateTax(1000);
内容的提问来源于stack exchange,提问作者Pbnd
相关产品推荐
相关产品推荐

