On this page
ReflectiveInjector
class deprecated
A ReflectiveDependency injection container used for instantiating objects and resolving dependencies.
Deprecated: from v5 - slow and brings in a lot of code, Use Injector.create instead.
abstract class ReflectiveInjector implements Injector {
static resolve(providers: Provider[]): ResolvedReflectiveProvider[]
static resolveAndCreate(providers: Provider[], parent?: Injector): ReflectiveInjector
static fromResolvedProviders(providers: ResolvedReflectiveProvider[], parent?: Injector): ReflectiveInjector
abstract parent: Injector | null
abstract resolveAndCreateChild(providers: Provider[]): ReflectiveInjector
abstract createChildFromResolved(providers: ResolvedReflectiveProvider[]): ReflectiveInjector
abstract resolveAndInstantiate(provider: Provider): any
abstract instantiateResolved(provider: ResolvedReflectiveProvider): any
abstract get(token: any, notFoundValue?: any): any
}
Description
An Injector is a replacement for a new operator, which can automatically resolve the constructor dependencies.
In typical use, application code asks for the dependencies in the constructor and they are resolved by the Injector.
Further information is available in the Usage Notes...
Static methods
|
resolve()
|
|||
|---|---|---|---|
Turns an array of provider definitions into an array of resolved providers. |
|||
|
providers |
Provider[] |
Returns
A resolution is a process of flattening multiple nested arrays and converting individual providers into an array of ResolvedReflectiveProviders.
Usage Notes
Example
@Injectable()
class Engine {
}
@Injectable()
class Car {
constructor(public engine:Engine) {}
}
var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);
expect(providers.length).toEqual(2);
expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
expect(providers[0].key.displayName).toBe("Car");
expect(providers[0].dependencies.length).toEqual(1);
expect(providers[0].factory).toBeDefined();
expect(providers[1].key.displayName).toBe("Engine");
});|
resolveAndCreate()
|
|---|
Resolves an array of providers and creates an injector from those providers. |
The passed-in providers can be an array of |
Usage NotesExample |
|
fromResolvedProviders()
|
||||||
|---|---|---|---|---|---|---|
Creates an injector from previously resolved providers. |
||||||
|
providers |
ResolvedReflectiveProvider[] |
|
parent |
Injector |
Optional. Default is |
Returns
This API is the recommended way to construct injectors in performance-sensitive parts.
Usage Notes
Example
@Injectable()
class Engine {
}
@Injectable()
class Car {
constructor(public engine:Engine) {}
}
var providers = ReflectiveInjector.resolve([Car, Engine]);
var injector = ReflectiveInjector.fromResolvedProviders(providers);
expect(injector.get(Car) instanceof Car).toBe(true);Properties
| Property | Description |
|---|---|
abstract parent: Injector | null |
Read-Only Parent of this injector. |
Methods
|
resolveAndCreateChild()
|
|||
|---|---|---|---|
Resolves an array of providers and creates a child injector from those providers. |
|||
|
providers |
Provider[] |
Returns
The passed-in providers can be an array of Type, Provider, or a recursive array of more providers.
Usage Notes
Example
class ParentProvider {}
class ChildProvider {}
var parent = ReflectiveInjector.resolveAndCreate([ParentProvider]);
var child = parent.resolveAndCreateChild([ChildProvider]);
expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);
expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);
expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));|
createChildFromResolved()
|
|||
|---|---|---|---|
Creates a child injector from previously resolved providers. |
|||
|
providers |
ResolvedReflectiveProvider[] |
Returns
This API is the recommended way to construct injectors in performance-sensitive parts.
Usage Notes
Example
class ParentProvider {}
class ChildProvider {}
var parentProviders = ReflectiveInjector.resolve([ParentProvider]);
var childProviders = ReflectiveInjector.resolve([ChildProvider]);
var parent = ReflectiveInjector.fromResolvedProviders(parentProviders);
var child = parent.createChildFromResolved(childProviders);
expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);
expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);
expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));|
resolveAndInstantiate()
|
|---|
Resolves a provider and instantiates an object in the context of the injector. |
The created object does not get cached by the injector. |
Usage NotesExample |
|
instantiateResolved()
|
|||
|---|---|---|---|
Instantiates an object using a resolved provider in the context of the injector. |
|||
|
provider |
ResolvedReflectiveProvider |
Returns
any
The created object does not get cached by the injector.
Usage Notes
Example
@Injectable()
class Engine {
}
@Injectable()
class Car {
constructor(public engine:Engine) {}
}
var injector = ReflectiveInjector.resolveAndCreate([Engine]);
var carProvider = ReflectiveInjector.resolve([Car])[0];
var car = injector.instantiateResolved(carProvider);
expect(car.engine).toBe(injector.get(Engine));
expect(car).not.toBe(injector.instantiateResolved(carProvider));|
get()
|
||||||
|---|---|---|---|---|---|---|
|
token |
any |
|
notFoundValue |
any |
Optional. Default is |
Returns
any
Usage notes
Example
The following example creates an Injector configured to create Engine and Car.
@Injectable()
class Engine {
}
@Injectable()
class Car {
constructor(public engine:Engine) {}
}
var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
var car = injector.get(Car);
expect(car instanceof Car).toBe(true);
expect(car.engine instanceof Engine).toBe(true);
Notice, we don't use the new operator because we explicitly want to have the Injector resolve all of the object's dependencies automatically.
TODO: delete in v14.
© 2010–2023 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v14.angular.io/api/core/ReflectiveInjector