diff --git a/goldens/public-api/core/primitives/di/index.api.md b/goldens/public-api/core/primitives/di/index.api.md index a863f128328..95276e3288c 100644 --- a/goldens/public-api/core/primitives/di/index.api.md +++ b/goldens/public-api/core/primitives/di/index.api.md @@ -16,7 +16,7 @@ export interface InjectionToken extends Type { // @public (undocumented) export interface Injector { // (undocumented) - retrieve?(token: InjectionToken, options?: unknown): T | NotFound; + retrieve(token: InjectionToken, options?: unknown): T | NotFound; } // @public diff --git a/packages/core/primitives/di/src/injector.ts b/packages/core/primitives/di/src/injector.ts index 936121c0ea7..2cc4bd59bd9 100644 --- a/packages/core/primitives/di/src/injector.ts +++ b/packages/core/primitives/di/src/injector.ts @@ -10,7 +10,7 @@ import {InjectionToken} from './injection_token'; import {NotFound} from './not_found'; export interface Injector { - retrieve?(token: InjectionToken, options?: unknown): T | NotFound; + retrieve(token: InjectionToken, options?: unknown): T | NotFound; } /** diff --git a/packages/core/src/di/contextual.ts b/packages/core/src/di/contextual.ts index 1d5227deeb0..8b903222660 100644 --- a/packages/core/src/di/contextual.ts +++ b/packages/core/src/di/contextual.ts @@ -14,8 +14,9 @@ import { import {getInjectImplementation, setInjectImplementation} from './inject_switch'; import type {Injector} from './injector'; -import {getCurrentInjector, setCurrentInjector} from './injector_compatibility'; +import {getCurrentInjector, setCurrentInjector, RetrievingInjector} from './injector_compatibility'; import {assertNotDestroyed, R3Injector} from './r3_injector'; +import {Injector as PrimitivesInjector} from '@angular/core/primitives/di'; /** * Runs the given function in the [context](guide/di/dependency-injection-context) of the given @@ -32,15 +33,19 @@ import {assertNotDestroyed, R3Injector} from './r3_injector'; * @publicApi */ export function runInInjectionContext(injector: Injector, fn: () => ReturnT): ReturnT { + let internalInjector: PrimitivesInjector; if (injector instanceof R3Injector) { assertNotDestroyed(injector); + internalInjector = injector; + } else { + internalInjector = new RetrievingInjector(injector); } let prevInjectorProfilerContext: InjectorProfilerContext; if (ngDevMode) { prevInjectorProfilerContext = setInjectorProfilerContext({injector, token: null}); } - const prevInjector = setCurrentInjector(injector); + const prevInjector = setCurrentInjector(internalInjector); const previousInjectImplementation = setInjectImplementation(undefined); try { return fn(); diff --git a/packages/core/src/di/injector_compatibility.ts b/packages/core/src/di/injector_compatibility.ts index 6313365f17c..74154c665f1 100644 --- a/packages/core/src/di/injector_compatibility.ts +++ b/packages/core/src/di/injector_compatibility.ts @@ -24,18 +24,18 @@ import { } from './interface/injector'; import {ProviderToken} from './provider_token'; import type {HostAttributeToken} from './host_attribute_token'; -import * as di from '@angular/core/primitives/di'; +import { + Injector as PrimitivesInjector, + NotFound, + NOT_FOUND, + InjectionToken as PrimitivesInjectionToken, + getCurrentInjector, +} from '@angular/core/primitives/di'; const _THROW_IF_NOT_FOUND = {}; export const THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND; -export function getCurrentInjector(): Injector { - return di.getCurrentInjector() as unknown as Injector; -} - -export function setCurrentInjector(injector: Injector | null | undefined): Injector { - return di.setCurrentInjector(injector as di.Injector) as unknown as Injector; -} +export {getCurrentInjector, setCurrentInjector} from '@angular/core/primitives/di'; /* * Name of a property (that we patch onto DI decorator), which is used as an annotation of which @@ -44,6 +44,14 @@ export function setCurrentInjector(injector: Injector | null | undefined): Injec */ const DI_DECORATOR_FLAG = '__NG_DI_FLAG__'; +export class RetrievingInjector implements PrimitivesInjector { + constructor(readonly injector: Injector) {} + retrieve(token: PrimitivesInjectionToken, options: unknown): T | NotFound { + const ngOptions = options as InjectOptions; + return this.injector.get(token, ngOptions.optional ? NOT_FOUND : THROW_IF_NOT_FOUND, ngOptions); + } +} + export const NG_TEMP_TOKEN_PATH = 'ngTempTokenPath'; const NG_TOKEN_PATH = 'ngTokenPath'; const NEW_LINE = /\n/gm; @@ -65,11 +73,14 @@ export function injectInjectorOnly( } else if (getCurrentInjector() === null) { return injectRootLimpMode(token, undefined, flags); } else { - const value = getCurrentInjector().get( - token, - flags & InjectFlags.Optional ? null : undefined, - flags, - ); + const currentInjector = getCurrentInjector(); + let injector: Injector; + if (currentInjector instanceof RetrievingInjector) { + injector = currentInjector.injector; + } else { + injector = currentInjector as unknown as Injector; + } + const value = injector.get(token, flags & InjectFlags.Optional ? null : undefined, flags); ngDevMode && emitInjectEvent(token as Type, value, flags); return value; } diff --git a/packages/core/src/di/r3_injector.ts b/packages/core/src/di/r3_injector.ts index d3a7a249973..31720cb6987 100644 --- a/packages/core/src/di/r3_injector.ts +++ b/packages/core/src/di/r3_injector.ts @@ -74,6 +74,12 @@ import { import {ProviderToken} from './provider_token'; import {INJECTOR_SCOPE, InjectorScope} from './scope'; import {setActiveConsumer} from '@angular/core/primitives/signals'; +import { + Injector as PrimitivesInjector, + InjectionToken as PrimitivesInjectionToken, + NOT_FOUND, + NotFound, +} from '@angular/core/primitives/di'; /** * Marker which indicates that a value has not yet been created from the factory function. @@ -180,7 +186,7 @@ export abstract class EnvironmentInjector implements Injector { abstract onDestroy(callback: () => void): () => void; } -export class R3Injector extends EnvironmentInjector { +export class R3Injector extends EnvironmentInjector implements PrimitivesInjector { /** * Map of tokens to records which contain the instances of those tokens. * - `null` value implies that we don't have the record. Used by tree-shakable injectors @@ -235,6 +241,11 @@ export class R3Injector extends EnvironmentInjector { this.injectorDefTypes = new Set(this.get(INJECTOR_DEF_TYPES, EMPTY_ARRAY, InjectFlags.Self)); } + retrieve(token: PrimitivesInjectionToken, options?: unknown): T | NotFound { + const ngOptions = options as InjectOptions; + return this.get(token, ngOptions.optional ? NOT_FOUND : THROW_IF_NOT_FOUND, ngOptions); + } + /** * Destroy the injector and release references to every instance or provider associated with it. * diff --git a/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json b/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json index acbb698fbd1..0a9bca51c9a 100644 --- a/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json @@ -107,6 +107,7 @@ "NG_INJ_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -140,6 +141,7 @@ "REMOVE_STYLES_ON_COMPONENT_DESTROY", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SELF_TOKEN_REGEX", @@ -299,7 +301,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -457,7 +459,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/animations/bundle.golden_symbols.json b/packages/core/test/bundling/animations/bundle.golden_symbols.json index ac9371dc2ad..374c49b7abf 100644 --- a/packages/core/test/bundling/animations/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations/bundle.golden_symbols.json @@ -114,6 +114,7 @@ "NG_MOD_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -151,6 +152,7 @@ "REMOVE_STYLES_ON_COMPONENT_DESTROY", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RootComponent", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", @@ -320,7 +322,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -483,7 +485,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json index ec6c5c7c3ac..007fcf58727 100644 --- a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json +++ b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json @@ -83,6 +83,7 @@ "NG_MOD_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -115,6 +116,7 @@ "REMOVE_STYLES_ON_COMPONENT_DESTROY", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SIGNAL", @@ -248,7 +250,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -391,7 +393,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/defer/bundle.golden_symbols.json b/packages/core/test/bundling/defer/bundle.golden_symbols.json index 88183746ae4..e2d5c97e7f0 100644 --- a/packages/core/test/bundling/defer/bundle.golden_symbols.json +++ b/packages/core/test/bundling/defer/bundle.golden_symbols.json @@ -112,6 +112,7 @@ "NG_TEMPLATE_SELECTOR", "NG_TEMP_TOKEN_PATH", "NG_TOKEN_PATH", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -145,6 +146,7 @@ "REMOVE_STYLES_ON_COMPONENT_DESTROY", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SIGNAL", @@ -300,7 +302,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -862,7 +864,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json index f8161eff5eb..73ff4682984 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -119,6 +119,7 @@ "NG_PROV_DEF", "NG_VALIDATORS", "NG_VALUE_ACCESSOR", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -165,6 +166,7 @@ "Renderer2", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RootComponent", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", @@ -362,7 +364,7 @@ "getConstant", "getControlAsyncValidators", "getControlValidators", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -584,7 +586,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json index 931d9e11425..83d193e7e65 100644 --- a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json @@ -111,6 +111,7 @@ "NG_PROV_DEF", "NG_VALIDATORS", "NG_VALUE_ACCESSOR", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -159,6 +160,7 @@ "RendererFactory2", "RendererStyleFlags2", "RequiredValidator", + "RetrievingInjector", "RootComponent", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", @@ -349,7 +351,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -577,7 +579,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json index 459b2a1a815..29b0b998473 100644 --- a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json @@ -58,6 +58,7 @@ "NG_INJ_DEF", "NG_MOD_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -87,6 +88,7 @@ "REACTIVE_LVIEW_CONSUMER_NODE", "REACTIVE_NODE", "RendererFactory2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SIGNAL", @@ -195,7 +197,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDeclarationTNode", @@ -317,7 +319,7 @@ "setActiveConsumer", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setIncludeViewProviders", "setInjectImplementation", diff --git a/packages/core/test/bundling/hydration/bundle.golden_symbols.json b/packages/core/test/bundling/hydration/bundle.golden_symbols.json index f0fab949f6d..fa184c11a12 100644 --- a/packages/core/test/bundling/hydration/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hydration/bundle.golden_symbols.json @@ -89,6 +89,7 @@ "NG_INJ_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -120,6 +121,7 @@ "RESPONSE_TYPE", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SIGNAL", @@ -255,7 +257,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -421,7 +423,7 @@ "setActiveConsumer", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setIncludeViewProviders", diff --git a/packages/core/test/bundling/injection/bundle.golden_symbols.json b/packages/core/test/bundling/injection/bundle.golden_symbols.json index c42ab000dc3..6608d9404b3 100644 --- a/packages/core/test/bundling/injection/bundle.golden_symbols.json +++ b/packages/core/test/bundling/injection/bundle.golden_symbols.json @@ -16,10 +16,12 @@ "NG_INJECTOR_DEF", "NG_INJ_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_YET", "NULL_INJECTOR", "NullInjector", "R3Injector", + "RetrievingInjector", "RuntimeError", "ScopedService", "Subscription", @@ -43,7 +45,7 @@ "forEachSingleProvider", "forwardRef", "getClosureSafeProperty", - "getCurrentInjector2", + "getCurrentInjector", "getFactoryDef", "getInjectableDef", "getInjectorDef", @@ -63,7 +65,7 @@ "processInjectorTypesWithProviders", "resolveForwardRef", "setActiveConsumer", - "setCurrentInjector2", + "setCurrentInjector", "setInjectImplementation", "stringify", "walkProviderTree", diff --git a/packages/core/test/bundling/router/bundle.golden_symbols.json b/packages/core/test/bundling/router/bundle.golden_symbols.json index 665e6f1cc1d..d7e8e47e97e 100644 --- a/packages/core/test/bundling/router/bundle.golden_symbols.json +++ b/packages/core/test/bundling/router/bundle.golden_symbols.json @@ -124,6 +124,7 @@ "NG_MOD_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -191,6 +192,7 @@ "RendererStyleFlags2", "ResolveEnd", "ResolveStart", + "RetrievingInjector", "RouteConfigLoadEnd", "RouteConfigLoadStart", "RouteReuseStrategy", @@ -429,7 +431,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentQueryIndex", "getCurrentTNode", "getCurrentTNodePlaceholderOk", @@ -668,7 +670,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json index d419b334f15..78e111ba9c5 100644 --- a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json +++ b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json @@ -77,6 +77,7 @@ "NG_INJ_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -105,6 +106,7 @@ "REMOVE_STYLES_ON_COMPONENT_DESTROY", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SIGNAL", @@ -222,7 +224,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -350,7 +352,7 @@ "setActiveConsumer", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setIncludeViewProviders", diff --git a/packages/core/test/bundling/todo/bundle.golden_symbols.json b/packages/core/test/bundling/todo/bundle.golden_symbols.json index 1e1dee8a510..b2aaa9d6600 100644 --- a/packages/core/test/bundling/todo/bundle.golden_symbols.json +++ b/packages/core/test/bundling/todo/bundle.golden_symbols.json @@ -85,6 +85,7 @@ "NG_MOD_DEF", "NG_PIPE_DEF", "NG_PROV_DEF", + "NOT_FOUND", "NOT_FOUND2", "NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR", "NOT_YET", @@ -124,6 +125,7 @@ "REMOVE_STYLES_ON_COMPONENT_DESTROY", "RendererFactory2", "RendererStyleFlags2", + "RetrievingInjector", "RuntimeError", "SCHEDULE_IN_ROOT_ZONE", "SIGNAL", @@ -293,7 +295,7 @@ "getComponentDef", "getComponentLViewByIndex", "getConstant", - "getCurrentInjector2", + "getCurrentInjector", "getCurrentTNode", "getCurrentTNodePlaceholderOk", "getDOM", @@ -467,7 +469,7 @@ "setAllInputsForProperty", "setBindingRootForHostBindings", "setCurrentDirectiveIndex", - "setCurrentInjector2", + "setCurrentInjector", "setCurrentQueryIndex", "setCurrentTNode", "setDirectiveInputsWhichShadowsStyling", diff --git a/packages/core/test/render3/jit/declare_factory_spec.ts b/packages/core/test/render3/jit/declare_factory_spec.ts index 2d709f91dc1..69fd84fd6bf 100644 --- a/packages/core/test/render3/jit/declare_factory_spec.ts +++ b/packages/core/test/render3/jit/declare_factory_spec.ts @@ -15,15 +15,18 @@ import { ɵɵngDeclareFactory, } from '@angular/core'; import {ɵɵdefineInjector} from '@angular/core/src/di'; -import {setCurrentInjector} from '@angular/core/src/di/injector_compatibility'; +import {RetrievingInjector, setCurrentInjector} from '@angular/core/src/di/injector_compatibility'; describe('Factory declaration jit compilation', () => { - let previousInjector: Injector | null | undefined; + let previousInjector: RetrievingInjector | null | undefined; let previousInjectorProfilerContext: ɵInjectorProfilerContext; beforeEach(() => { - const injector = ɵcreateInjector(TestInjector); - previousInjector = setCurrentInjector(injector); - previousInjectorProfilerContext = ɵsetInjectorProfilerContext({injector, token: null}); + const injector = new RetrievingInjector(ɵcreateInjector(TestInjector)); + previousInjector = setCurrentInjector(injector) as RetrievingInjector; + previousInjectorProfilerContext = ɵsetInjectorProfilerContext({ + injector: injector.injector, + token: null, + }); }); afterEach(() => { setCurrentInjector(previousInjector); diff --git a/packages/core/test/render3/jit/declare_injectable_spec.ts b/packages/core/test/render3/jit/declare_injectable_spec.ts index a34ccd64bd2..e77802a10f5 100644 --- a/packages/core/test/render3/jit/declare_injectable_spec.ts +++ b/packages/core/test/render3/jit/declare_injectable_spec.ts @@ -18,16 +18,19 @@ import { ɵɵInjectableDeclaration, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, - ɵɵngDeclareNgModule, } from '@angular/core'; +import {RetrievingInjector} from '@angular/core/src/di/injector_compatibility'; describe('Injectable declaration jit compilation', () => { - let previousInjector: Injector | null | undefined; + let previousInjector: RetrievingInjector | null | undefined; let previousInjectorProfilerContext: ɵInjectorProfilerContext; beforeEach(() => { - const injector = ɵcreateInjector(TestInjector); - previousInjector = ɵsetCurrentInjector(injector); - previousInjectorProfilerContext = ɵsetInjectorProfilerContext({injector, token: null}); + const injector = new RetrievingInjector(ɵcreateInjector(TestInjector)); + previousInjector = ɵsetCurrentInjector(injector) as RetrievingInjector; + previousInjectorProfilerContext = ɵsetInjectorProfilerContext({ + injector: injector.injector, + token: null, + }); }); afterEach(() => { ɵsetCurrentInjector(previousInjector); diff --git a/packages/examples/core/di/ts/injector_spec.ts b/packages/examples/core/di/ts/injector_spec.ts index 517a6bc0e65..b9bc9133059 100644 --- a/packages/examples/core/di/ts/injector_spec.ts +++ b/packages/examples/core/di/ts/injector_spec.ts @@ -13,9 +13,7 @@ import { InjectOptions, Injector, ProviderToken, - ɵInjectorProfilerContext, - ɵsetCurrentInjector as setCurrentInjector, - ɵsetInjectorProfilerContext, + runInInjectionContext, } from '@angular/core'; class MockRootScopeInjector implements Injector { @@ -27,17 +25,9 @@ class MockRootScopeInjector implements Injector { flags: InjectFlags | InjectOptions = InjectFlags.Default, ): T { if ((token as any).ɵprov && (token as any).ɵprov.providedIn === 'root') { - const old = setCurrentInjector(this); - const previousInjectorProfilerContext = ɵsetInjectorProfilerContext({ - injector: this, - token: null, - }); - try { + return runInInjectionContext(this, () => { return (token as any).ɵprov.factory(); - } finally { - setCurrentInjector(old); - ɵsetInjectorProfilerContext(previousInjectorProfilerContext); - } + }); } return this.parent.get(token, defaultValue, flags); }