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.
说明 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.
A resolution is a process of flattening multiple nested arrays and converting individual providers into an array of ResolvedReflectiveProvider
s.
使用说明 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"); });
content_copy
@ 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
static resolveAndCreate ( providers : Provider [], parent ?: Injector ): ReflectiveInjector
参数 返回值 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);
content_copy
@ 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
static fromResolvedProviders ( providers : ResolvedReflectiveProvider [], parent ?: Injector ): ReflectiveInjector
参数 返回值 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);
content_copy
@ 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 );
属性 属性 说明 abstract parent : Injector | null
只读 Parent of this injector.
方法 Resolves an array of providers and creates a child injector from those providers.
abstract resolveAndCreateChild (providers: Provider[]): ReflectiveInjector
abstract resolveAndCreateChild ( providers : Provider []): ReflectiveInjector
参数 返回值 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));
content_copy
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.
abstract createChildFromResolved (providers: ResolvedReflectiveProvider[]): ReflectiveInjector
abstract createChildFromResolved ( providers : ResolvedReflectiveProvider []): ReflectiveInjector
参数 返回值 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));
content_copy
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
abstract resolveAndInstantiate ( provider : Provider ): any
参数 返回值 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));
content_copy
@ 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
abstract instantiateResolved ( provider : ResolvedReflectiveProvider ): any
参数 返回值 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));
content_copy
@ 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
abstract get ( token : any , notFoundValue ?: any ): any
参数 token
any
notFoundValue
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);
content_copy
@ 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.