ReflectiveInjector

A ReflectiveDependency injection container used for instantiating objects and resolving dependencies.

弃用说明

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 get 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 }

说明

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.

静态方法

Turns an array of provider definitions into an array of resolved providers.

static resolve(providers: Provider[]): ResolvedReflectiveProvider[]

参数

providers

Type: Provider[].

返回值

ResolvedReflectiveProvider[]

A resolution is a process of flattening multiple nested arrays and converting individual providers into an array of ResolvedReflectiveProviders.

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

Resolves an array of providers and creates an injector from those providers.

static resolveAndCreate(providers: Provider[], parent?: Injector): ReflectiveInjector

参数

providers

Type: Provider[].

parent

Type: Injector.

可选. 默认值是 undefined.

返回值

ReflectiveInjector

The passed-in providers can be an array of Type, Provider, or a recursive array of more providers.

Example

@Injectable() class Engine { } @Injectable() class Car { constructor(public engine:Engine) {} } var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]); expect(injector.get(Car) instanceof Car).toBe(true);

Creates an injector from previously resolved providers.

static fromResolvedProviders(providers: ResolvedReflectiveProvider[], parent?: Injector): ReflectiveInjector

参数

providers

Type: ResolvedReflectiveProvider[].

parent

Type: Injector.

可选. 默认值是 undefined.

返回值

ReflectiveInjector

This API is the recommended way to construct injectors in performance-sensitive parts.

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

属性

属性名类型说明
parent只读

Parent of this injector.

方法

Resolves an array of providers and creates a child injector from those providers.

abstract resolveAndCreateChild(providers: Provider[]): ReflectiveInjector

参数

providers

Type: Provider[].

返回值

ReflectiveInjector

The passed-in providers can be an array of Type, Provider, or a recursive array of more providers.

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

Creates a child injector from previously resolved providers.

abstract createChildFromResolved(providers: ResolvedReflectiveProvider[]): ReflectiveInjector

参数

providers

Type: ResolvedReflectiveProvider[].

返回值

ReflectiveInjector

This API is the recommended way to construct injectors in performance-sensitive parts.

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

Resolves a provider and instantiates an object in the context of the injector.

abstract resolveAndInstantiate(provider: Provider): any

参数

provider

Type: Provider.

返回值

any

The created object does not get cached by the injector.

Example

@Injectable() class Engine { } @Injectable() class Car { constructor(public engine:Engine) {} } var injector = ReflectiveInjector.resolveAndCreate([Engine]); var car = injector.resolveAndInstantiate(Car); expect(car.engine).toBe(injector.get(Engine)); expect(car).not.toBe(injector.resolveAndInstantiate(Car));

Instantiates an object using a resolved provider in the context of the injector.

abstract instantiateResolved(provider: ResolvedReflectiveProvider): any

参数

provider

Type: ResolvedReflectiveProvider.

返回值

any

The created object does not get cached by the injector.

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));
abstract get(token: any, notFoundValue?: any): any

参数

token

Type: any.

notFoundValue

Type: any.

可选. 默认值是 undefined.

返回值

any

使用说明

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.