inject
Injects a token from the currently active injector.
inject is only supported in an injection context. It
can be used during:
- Construction (via the
constructor) of a class being instantiated by the DI system, such as an@Injectableor@Component. - In the initializer for fields of such classes.
- In the factory function specified for
useFactoryof aProvideror an@Injectable. - In the
factoryfunction specified for anInjectionToken. - In a stackframe of a function call in a DI context
function inject<T>(token: ProviderToken<T>): T;Tfunction inject<T>(token: ProviderToken<T>, options: InjectOptions & { optional?: false | undefined; }): T;InjectOptions & { optional?: false | undefined; }Control how injection is executed. Options correspond to injection strategies
that can be specified with parameter decorators @Host, @Self, @SkipSelf, and
@Optional.
Tfunction inject<T>(token: ProviderToken<T>, options: InjectOptions): T | null;InjectOptionsControl how injection is executed. Options correspond to injection strategies
that can be specified with parameter decorators @Host, @Self, @SkipSelf, and
@Optional.
T | nullfunction inject(token: HostAttributeToken): string;HostAttributeTokenA token that represents a static attribute on the host node that should be injected.
stringfunction inject(token: HostAttributeToken, options: { optional: true; }): string | null;HostAttributeTokenA token that represents a static attribute on the host node that should be injected.
{ optional: true; }string | nullfunction inject(token: HostAttributeToken, options: { optional: false; }): string;HostAttributeTokenA token that represents a static attribute on the host node that should be injected.
{ optional: false; }stringUsage Notes
In practice the inject() calls are allowed in a constructor, a constructor parameter and a
field initializer:
@Injectable({providedIn: 'root'})export class Car { radio: Radio|undefined; // OK: field initializer spareTyre = inject(Tyre); constructor() { // OK: constructor body this.radio = inject(Radio); }}
It is also legal to call inject from a provider's factory:
providers: [ {provide: Car, useFactory: () => { // OK: a class factory const engine = inject(Engine); return new Car(engine); }}]
Calls to the inject() function outside of the class creation context will result in error. Most
notably, calls to inject() are disallowed after a class instance was created, in methods
(including lifecycle hooks):