public JsEnv(ILoader loader, int debugPort = -1) { const int libVersionExpect = 9; int libVersion = PuertsDLL.GetLibVersion(); if (libVersion != libVersionExpect) { throw new InvalidProgramException("expect lib version " + libVersionExpect + ", but got " + libVersion); } //PuertsDLL.SetLogCallback(LogCallback, LogWarningCallback, LogErrorCallback); this.loader = loader; isolate = PuertsDLL.CreateJSEngine(); lock (jsEnvs) { Idx = -1; for (int i = 0; i < jsEnvs.Count; i++) { if (jsEnvs[i] == null) { Idx = i; jsEnvs[Idx] = this; break; } } if (Idx == -1) { Idx = jsEnvs.Count; jsEnvs.Add(this); } } objectPool = new ObjectPool(); TypeRegister = new TypeRegister(this); genericDelegateFactory = new GenericDelegateFactory(this); GeneralGetterManager = new GeneralGetterManager(this); GeneralSetterManager = new GeneralSetterManager(this); PuertsDLL.SetGeneralDestructor(isolate, StaticCallbacks.GeneralDestructor); TypeRegister.InitArrayTypeId(isolate); PuertsDLL.SetGlobalFunction(isolate, "__tgjsRegisterTickHandler", StaticCallbacks.JsEnvCallbackWrap, AddCallback(RegisterTickHandler)); PuertsDLL.SetGlobalFunction(isolate, "__tgjsLoadType", StaticCallbacks.JsEnvCallbackWrap, AddCallback(LoadType)); PuertsDLL.SetGlobalFunction(isolate, "__tgjsGetNestedTypes", StaticCallbacks.JsEnvCallbackWrap, AddCallback(GetNestedTypes)); PuertsDLL.SetGlobalFunction(isolate, "__tgjsGetLoader", StaticCallbacks.JsEnvCallbackWrap, AddCallback(GetLoader)); //可以DISABLE掉自动注册,通过手动调用PuertsStaticWrap.AutoStaticCodeRegister.Register(jsEnv)来注册 #if !DISABLE_AUTO_REGISTER const string AutoStaticCodeRegisterClassName = "PuertsStaticWrap.AutoStaticCodeRegister"; var autoRegister = Type.GetType(AutoStaticCodeRegisterClassName, false); if (autoRegister == null) { foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { autoRegister = assembly.GetType(AutoStaticCodeRegisterClassName, false); if (autoRegister != null) { break; } } } if (autoRegister != null) { var methodInfoOfRegister = autoRegister.GetMethod("Register"); methodInfoOfRegister.Invoke(null, new object[] { this }); } #endif if (debugPort != -1) { PuertsDLL.CreateInspector(isolate, debugPort); } ExecuteFile("puerts/init.js"); ExecuteFile("puerts/log.js"); ExecuteFile("puerts/cjsload.js"); ExecuteFile("puerts/modular.js"); ExecuteFile("puerts/csharp.js"); ExecuteFile("puerts/timer.js"); ExecuteFile("puerts/events.js"); ExecuteFile("puerts/promises.js"); ExecuteFile("puerts/polyfill.js"); }