diff --git a/src/vs/platform/instantiation/common/instantiationService.ts b/src/vs/platform/instantiation/common/instantiationService.ts index 10b8b4161a084520b95b5f338f6a729be5c38737..a829e88f81285bc9049e2a0b9ef7c520b1288dc0 100644 --- a/src/vs/platform/instantiation/common/instantiationService.ts +++ b/src/vs/platform/instantiation/common/instantiationService.ts @@ -187,7 +187,7 @@ export class InstantiationService implements IInstantiationService { for (let { data } of roots) { // create instance and overwrite the service collections - const instance = this._createInstance(data.desc.ctor, data.desc.staticArguments, data._trace); + const instance = this._createServiceInstance(data.desc.ctor, data.desc.staticArguments, data._trace); this._setServiceInstance(data.id, instance); graph.removeNode(data); } @@ -195,6 +195,10 @@ export class InstantiationService implements IInstantiationService { return this._getServiceInstanceOrDescriptor(id); } + + protected _createServiceInstance(ctor: any, args: any[] = [], _trace: Trace): T { + return this._createInstance(ctor, args, _trace); + } } //#region -- tracing --- diff --git a/src/vs/platform/instantiation/node/instantiationService.ts b/src/vs/platform/instantiation/node/instantiationService.ts new file mode 100644 index 0000000000000000000000000000000000000000..d89da5291a441844bf4f8bf9e13af4be5c577df7 --- /dev/null +++ b/src/vs/platform/instantiation/node/instantiationService.ts @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; +import { IdleValue } from 'vs/base/common/async'; +import { InstantiationService as BaseInstantiationService } from 'vs/platform/instantiation/common/instantiationService'; + +// this is in the /node/-layer because it depends on Proxy which isn't available +// in IE11 and therefore not in the /common/-layer + +export class InstantiationService extends BaseInstantiationService { + + protected _createServiceInstance(ctor: any, args: any[] = [], _trace): T { + return InstantiationService._newIdleProxyService(() => super._createServiceInstance(ctor, args, _trace)); + } + + private static _newIdleProxyService(executor: () => T): T { + const idle = new IdleValue(executor); + return new Proxy(Object.create(null), { + get(_target, prop) { + return idle.getValue()[prop]; + } + }); + } +} diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts index f6f68725746da1c5d2537c225966baa7fdc285e8..4654ca7b0863c37e39b194d717303264124b5099 100644 --- a/src/vs/workbench/electron-browser/shell.ts +++ b/src/vs/workbench/electron-browser/shell.ts @@ -44,6 +44,7 @@ import { ExtensionService } from 'vs/workbench/services/extensions/electron-brow import { IStorageService } from 'vs/platform/storage/common/storage'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +// import { InstantiationService } from 'vs/platform/instantiation/node/instantiationService'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; import { ILifecycleService, LifecyclePhase, ShutdownReason, StartupKind } from 'vs/platform/lifecycle/common/lifecycle'; import { IMarkerService } from 'vs/platform/markers/common/markers';