Есть ли способ переключения сред при использовании Jint.NET? - PullRequest
0 голосов
/ 20 сентября 2019

В настоящее время я использую Jint.NET консольный движок JavaScript для C # и пытаюсь эмулировать отдельные среды JavaScript, между которыми пользователь может переключаться.

Однако яне хотите создавать совершенно новый консольный движок для каждой среды JavaScript и вызывать большие накладные расходы, вместо этого просто переключайтесь между ними, используя один движок, и сохраняйте среды в другом месте, например:

   engine 1
   |      |
   |      |
env 1   env 2

Is itможно это сделать?

1 Ответ

0 голосов
/ 21 сентября 2019

Нашел решение для этого, хотя я нигде не могу найти документацию по этому вопросу, так что это может быть непреднамеренный метод.Вам нужно использовать EnterExecutionContext на только что созданном LexicalEnvironments, и вы можете переключаться между ними, чтобы иметь отдельные среды JS.

Вот пример:

using Jint.Runtime.Environments;
using Jint.Native.Object;
using Jint.Native.Global;

//Create a new object instance and environment.
JSObjectInstance = GlobalObject.CreateGlobalObject(jintEngine);
JSEnvironment = LexicalEnvironment.NewObjectEnvironment(jintEngine, JSObjectInstance, jintEngine.GlobalEnvironment, false);

//Enter the new environment.
jintEngine.EnterExecutionContext(JSEnvironment, JSEnvironment, new Jint.Native.JsValue(false));

И когда выпокончив с этой средой, вы можете оставить, используя LeaveExecutionContext, и снова присоединиться к глобальной по умолчанию, например:

jintEngine.EnterExecutionContext(jintEngine.GlobalEnvironment, jintEngine.GlobalEnvironment, jintEngine.Global);
...