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); }