ClearsSript V8ScriptEngine TypeError: form.Show is not a function

ClearsSript V8ScriptEngine TypeError: form.Show is not a function

我对系统中的某些动态部分使用 MS ClearScript library。我有一些已经在 .NET(C#) 代码中创建的对象列表,这些对象用作函数使用的描述。像这样 (Javascript):

var form = MetaData.GetClass('MyFormClassName', 'FormId'); form.Show();

在此示例中,使用静态方法 MetaData.GetClass 获取 ID FormId 的 class MyFormClassName。 returns ID FormIdMyFormClassName 实例的方法创建了 in.NET(C#) 代码。有一种方法 Show() 在实例中显示带有参数的 windows 形式。

但是当我调用 Show() 方法时出现错误:

form.Show is not a function

引擎包含一个对象Properties,但没有方法。引擎不知道对象 Type。当我将 AddHostObject 与名称 form 一起使用时,它工作正常,但我不知道将来会使用什么变量名。

有人知道如何在 V8ScriptEngine 中使用 .NET (C#) 对象方法吗?是否可以不每次都注册宿主对象以供对象方法使用?

最有可能的问题是 MetaData.GetClass return 值类型是基础 class 或没有 Show 方法的接口。

如果正确,则 Show 由 returned 对象的实际类型提供,并且需要 downcasting 才能调用它。

有几种方法可以解决这个问题:

  1. 在JavaScript中使用HostFunctions.cast or HostFunctions.asType进行向下转换。
  2. 将属性 ScriptMember(ScriptMemberFlags.ExposeRuntimeType) 添加到您的 MetaData.GetClass 实现中。
  3. ScriptEngine.DisableTypeRestriction 设置为 true(不推荐)。