inject
function
Injects a token from the currently active injector. inject
is only supported during instantiation of a dependency by the DI system. It can be used during:
- Construction (via the
constructor
) of a class being instantiated by the DI system, such as an@Injectable
or@Component
. - In the initializer for fields of such classes.
- In the factory function specified for
useFactory
of aProvider
or an@Injectable
. - In the
factory
function specified for anInjectionToken
.
inject(token: ProviderToken<T>): T
Parameters
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
Returns
T
: the injected value if operation is successful, null
otherwise.
Throws
Error
if called outside of a supported context.
inject(token: ProviderToken<T>, flags?: InjectFlags): T | null
Parameters
token |
ProviderToken<T> |
A token that represents a dependency that should be injected. |
flags |
InjectFlags |
Control how injection is executed. The flags correspond to injection strategies that can be specified with parameter decorators Optional. Default is |
Returns
T | null
: the injected value if operation is successful, null
otherwise.
Throws
Error
if called outside of a supported context.
Usage 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):
@Component({ ... }) export class CarComponent { ngOnInit() { // ERROR: too late, the component instance was already created const engine = inject(Engine); engine.start(); } }
© 2010–2022 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://angular.io/api/core/inject