Нашел решение для этого, хотя я нигде не могу найти документацию по этому вопросу, так что это может быть непреднамеренный метод.Вам нужно использовать 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);