189 lines
4.6 KiB
TypeScript
189 lines
4.6 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
import {ClassSansProvider, ConstructorProvider, ConstructorSansProvider, ExistingProvider, ExistingSansProvider, FactoryProvider, FactorySansProvider, StaticClassProvider, StaticClassSansProvider, ValueProvider, ValueSansProvider} from '../di/provider';
|
|
import {ReflectionCapabilities} from '../reflection/reflection_capabilities';
|
|
import {Type} from '../type';
|
|
import {makeDecorator, makeParamDecorator} from '../util/decorators';
|
|
import {EMPTY_ARRAY} from '../view/util';
|
|
|
|
|
|
/**
|
|
* Type of the Inject decorator / constructor function.
|
|
*/
|
|
export interface InjectDecorator {
|
|
/**
|
|
* A constructor parameter decorator that specifies a
|
|
* custom provider of a dependency.
|
|
*
|
|
* @see ["Dependency Injection Guide"](guide/dependency-injection).
|
|
*
|
|
* @usageNotes
|
|
* The following example shows a class constructor that specifies a
|
|
* custom provider of a dependency using the parameter decorator.
|
|
*
|
|
* {@example core/di/ts/metadata_spec.ts region='Inject'}
|
|
*
|
|
* When `@Inject()` is not present, the `Injector` uses the type annotation of the
|
|
* parameter as the provider.
|
|
*
|
|
* {@example core/di/ts/metadata_spec.ts region='InjectWithoutDecorator'}
|
|
*/
|
|
(token: any): any;
|
|
new (token: any): Inject;
|
|
}
|
|
|
|
/**
|
|
* Type of the Inject metadata.
|
|
*/
|
|
export interface Inject {
|
|
/**
|
|
* Injector token that maps to the dependency to be injected.
|
|
*/
|
|
token: any;
|
|
}
|
|
|
|
/**
|
|
* Inject decorator and metadata.
|
|
*
|
|
* @Annotation
|
|
*/
|
|
export const Inject: InjectDecorator = makeParamDecorator('Inject', (token: any) => ({token}));
|
|
|
|
|
|
/**
|
|
* Type of the Optional decorator / constructor function.
|
|
*/
|
|
export interface OptionalDecorator {
|
|
/**
|
|
* A constructor parameter decorator that marks a dependency as optional.
|
|
*
|
|
* The DI framework provides null if the dependency is not found.
|
|
* For example, the following code allows the possibility of a null result:
|
|
*
|
|
* {@example core/di/ts/metadata_spec.ts region='Optional'}
|
|
*
|
|
* @see ["Dependency Injection Guide"](guide/dependency-injection).
|
|
*/
|
|
(): any;
|
|
new (): Optional;
|
|
}
|
|
|
|
/**
|
|
* Type of the Optional metadata.
|
|
*/
|
|
export interface Optional {}
|
|
|
|
/**
|
|
* Optional decorator and metadata.
|
|
*
|
|
* @Annotation
|
|
*/
|
|
export const Optional: OptionalDecorator = makeParamDecorator('Optional');
|
|
|
|
/**
|
|
* Type of the Self decorator / constructor function.
|
|
*/
|
|
export interface SelfDecorator {
|
|
/**
|
|
* A constructor parameter decorator that tells the DI framework
|
|
* to retrieve a dependency only from the local injector.
|
|
*
|
|
* In the following example, the dependency can be resolved
|
|
* by the local injector when instantiating the class itself, but not
|
|
* when instantiating a child.
|
|
*
|
|
* {@example core/di/ts/metadata_spec.ts region='Self'}
|
|
*
|
|
* @see ["Dependency Injection Guide"](guide/dependency-injection).
|
|
*
|
|
*
|
|
*/
|
|
(): any;
|
|
new (): Self;
|
|
}
|
|
|
|
/**
|
|
* Type of the Self metadata.
|
|
*/
|
|
export interface Self {}
|
|
|
|
/**
|
|
* Self decorator and metadata.
|
|
*
|
|
* @Annotation
|
|
*/
|
|
export const Self: SelfDecorator = makeParamDecorator('Self');
|
|
|
|
|
|
/**
|
|
* Type of the SkipSelf decorator / constructor function.
|
|
*/
|
|
export interface SkipSelfDecorator {
|
|
/**
|
|
* A constructor parameter decorator that tells the DI framework
|
|
* that dependency resolution should start from the parent injector.
|
|
*
|
|
* In the following example, the dependency can be resolved when
|
|
* instantiating a child, but not when instantiating the class itself.
|
|
*
|
|
* {@example core/di/ts/metadata_spec.ts region='SkipSelf'}
|
|
*
|
|
* @see ["Dependency Injection Guide"](guide/dependency-injection).
|
|
*
|
|
*
|
|
*/
|
|
(): any;
|
|
new (): SkipSelf;
|
|
}
|
|
|
|
/**
|
|
* Type of the SkipSelf metadata.
|
|
*
|
|
*
|
|
*/
|
|
export interface SkipSelf {}
|
|
|
|
/**
|
|
* SkipSelf decorator and metadata.
|
|
*
|
|
* @Annotation
|
|
*/
|
|
export const SkipSelf: SkipSelfDecorator = makeParamDecorator('SkipSelf');
|
|
|
|
/**
|
|
* Type of the Host decorator / constructor function.
|
|
*/
|
|
export interface HostDecorator {
|
|
/**
|
|
* A constructor parameter decorator that tells the DI framework
|
|
* to retrieve a dependency from any injector until
|
|
* reaching the host element of the current component.
|
|
*
|
|
* @see ["Dependency Injection Guide"](guide/dependency-injection).
|
|
*
|
|
* @usageNotes
|
|
*
|
|
* {@example core/di/ts/metadata_spec.ts region='Host'}
|
|
*/
|
|
(): any;
|
|
new (): Host;
|
|
}
|
|
|
|
/**
|
|
* Type of the Host metadata.
|
|
*/
|
|
export interface Host {}
|
|
|
|
/**
|
|
* Host decorator and metadata.
|
|
*
|
|
* @Annotation
|
|
*/
|
|
export const Host: HostDecorator = makeParamDecorator('Host');
|