From ec01599987d310cfc8e60ffc75fa03815a47fd59 Mon Sep 17 00:00:00 2001 From: iteriani Date: Wed, 25 Jun 2025 08:49:01 -0700 Subject: [PATCH] refactor(core): Add Constructor type to injection types (#62265) This allows us to pass in constructors into the inject function PR Close #62265 --- goldens/public-api/core/primitives/di/index.api.md | 9 ++++++++- packages/core/primitives/di/index.ts | 2 +- packages/core/primitives/di/src/injection_token.ts | 2 +- packages/core/primitives/di/src/injector.ts | 11 +++++++---- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/goldens/public-api/core/primitives/di/index.api.md b/goldens/public-api/core/primitives/di/index.api.md index d44a6fdcfe1..723552bb759 100644 --- a/goldens/public-api/core/primitives/di/index.api.md +++ b/goldens/public-api/core/primitives/di/index.api.md @@ -4,11 +4,18 @@ ```ts +// @public (undocumented) +export function defineInjectable(opts: { + token: unknown; + providedIn?: Type | 'root' | 'platform' | 'any' | 'environment' | null; + factory: () => T; +}): unknown; + // @public (undocumented) export function getCurrentInjector(): Injector | undefined | null; // @public (undocumented) -export function inject(token: InjectionToken, options?: unknown): T | NotFound; +export function inject(token: InjectionToken | Constructor, options?: unknown): T | NotFound; // @public export interface InjectionToken { diff --git a/packages/core/primitives/di/index.ts b/packages/core/primitives/di/index.ts index 705c5dcd337..d0974481569 100644 --- a/packages/core/primitives/di/index.ts +++ b/packages/core/primitives/di/index.ts @@ -11,4 +11,4 @@ export type {Injector} from './src/injector'; export {NOT_FOUND, NotFoundError, isNotFound} from './src/not_found'; export type {NotFound} from './src/not_found'; export type {InjectionToken, ɵɵInjectableDeclaration} from './src/injection_token'; -export {registerInjectable} from './src/injection_token'; +export {defineInjectable, registerInjectable} from './src/injection_token'; diff --git a/packages/core/primitives/di/src/injection_token.ts b/packages/core/primitives/di/src/injection_token.ts index d16cb103d17..06cf0080fce 100644 --- a/packages/core/primitives/di/src/injection_token.ts +++ b/packages/core/primitives/di/src/injection_token.ts @@ -80,7 +80,7 @@ export function defineInjectable(opts: { } as ɵɵInjectableDeclaration; } -type Constructor = Function & {prototype: T}; +export type Constructor = Function & {prototype: T}; export function registerInjectable( ctor: unknown, diff --git a/packages/core/primitives/di/src/injector.ts b/packages/core/primitives/di/src/injector.ts index d675192138b..61bf332f0a5 100644 --- a/packages/core/primitives/di/src/injector.ts +++ b/packages/core/primitives/di/src/injector.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {InjectionToken} from './injection_token'; +import {Constructor, InjectionToken} from './injection_token'; import {NotFound, NOT_FOUND} from './not_found'; export interface Injector { @@ -33,10 +33,13 @@ export function setCurrentInjector( return former; } -export function inject(token: InjectionToken, options?: unknown): T | NotFound { +export function inject( + token: InjectionToken | Constructor, + options?: unknown, +): T | NotFound { const currentInjector = getCurrentInjector(); - if (!currentInjector) { + if (!currentInjector || !(token as InjectionToken).ɵprov) { return NOT_FOUND; } - return currentInjector.retrieve(token, options); + return currentInjector.retrieve(token as InjectionToken, options); }