Project

General

Profile

1
/**
2
 * @license
3
 * Copyright Google Inc. All Rights Reserved.
4
 *
5
 * Use of this source code is governed by an MIT-style license that can be
6
 * found in the LICENSE file at https://angular.io/license
7
 */
8
import { Type } from '../type';
9
/**
10
 * @whatItDoes Configures the {@link Injector} to return an instance of `Type` when `Type' is used
11
 * as token.
12
 * @howToUse
13
 * ```
14
 * @Injectable()
15
 * class MyService {}
16
 *
17
 * const provider: TypeProvider = MyService;
18
 * ```
19
 *
20
 * @description
21
 *
22
 * Create an instance by invoking the `new` operator and supplying additional arguments.
23
 * This form is a short form of `TypeProvider`;
24
 *
25
 * For more details, see the {@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
26
 *
27
 * ### Example
28
 *
29
 * {@example core/di/ts/provider_spec.ts region='TypeProvider'}
30
 *
31
 * @stable
32
 */
33
export interface TypeProvider extends Type<any> {
34
}
35
/**
36
 * @whatItDoes Configures the {@link Injector} to return a value for a token.
37
 * @howToUse
38
 * ```
39
 * const provider: ValueProvider = {provide: 'someToken', useValue: 'someValue'};
40
 * ```
41
 *
42
 * @description
43
 * For more details, see the {@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
44
 *
45
 * ### Example
46
 *
47
 * {@example core/di/ts/provider_spec.ts region='ValueProvider'}
48
 *
49
 * @stable
50
 */
51
export interface ValueProvider {
52
    /**
53
     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).
54
     */
55
    provide: any;
56
    /**
57
     * The value to inject.
58
     */
59
    useValue: any;
60
    /**
61
     * If true, then injector returns an array of instances. This is useful to allow multiple
62
     * providers spread across many files to provide configuration information to a common token.
63
     *
64
     * ### Example
65
     *
66
     * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}
67
     */
68
    multi?: boolean;
69
}
70
/**
71
 * @whatItDoes Configures the {@link Injector} to return an instance of `useClass` for a token.
72
 * @howToUse
73
 * ```
74
 * @Injectable()
75
 * class MyService {}
76
 *
77
 * const provider: ClassProvider = {provide: 'someToken', useClass: MyService};
78
 * ```
79
 *
80
 * @description
81
 * For more details, see the {@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
82
 *
83
 * ### Example
84
 *
85
 * {@example core/di/ts/provider_spec.ts region='ClassProvider'}
86
 *
87
 * Note that following two providers are not equal:
88
 * {@example core/di/ts/provider_spec.ts region='ClassProviderDifference'}
89
 *
90
 * @stable
91
 */
92
export interface ClassProvider {
93
    /**
94
     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).
95
     */
96
    provide: any;
97
    /**
98
     * Class to instantiate for the `token`.
99
     */
100
    useClass: Type<any>;
101
    /**
102
     * If true, then injector returns an array of instances. This is useful to allow multiple
103
     * providers spread across many files to provide configuration information to a common token.
104
     *
105
     * ### Example
106
     *
107
     * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}
108
     */
109
    multi?: boolean;
110
}
111
/**
112
 * @whatItDoes Configures the {@link Injector} to return a value of another `useExisting` token.
113
 * @howToUse
114
 * ```
115
 * const provider: ExistingProvider = {provide: 'someToken', useExisting: 'someOtherToken'};
116
 * ```
117
 *
118
 * @description
119
 * For more details, see the {@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
120
 *
121
 * ### Example
122
 *
123
 * {@example core/di/ts/provider_spec.ts region='ExistingProvider'}
124
 *
125
 * @stable
126
 */
127
export interface ExistingProvider {
128
    /**
129
     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).
130
     */
131
    provide: any;
132
    /**
133
     * Existing `token` to return. (equivalent to `injector.get(useExisting)`)
134
     */
135
    useExisting: any;
136
    /**
137
     * If true, then injector returns an array of instances. This is useful to allow multiple
138
     * providers spread across many files to provide configuration information to a common token.
139
     *
140
     * ### Example
141
     *
142
     * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}
143
     */
144
    multi?: boolean;
145
}
146
/**
147
 * @whatItDoes Configures the {@link Injector} to return a value by invoking a `useFactory`
148
 * function.
149
 * @howToUse
150
 * ```
151
 * function serviceFactory() { ... }
152
 *
153
 * const provider: FactoryProvider = {provide: 'someToken', useFactory: serviceFactory, deps: []};
154
 * ```
155
 *
156
 * @description
157
 * For more details, see the {@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
158
 *
159
 * ### Example
160
 *
161
 * {@example core/di/ts/provider_spec.ts region='FactoryProvider'}
162
 *
163
 * Dependencies can also be marked as optional:
164
 * {@example core/di/ts/provider_spec.ts region='FactoryProviderOptionalDeps'}
165
 *
166
 * @stable
167
 */
168
export interface FactoryProvider {
169
    /**
170
     * An injection token. (Typically an instance of `Type` or `InjectionToken`, but can be `any`).
171
     */
172
    provide: any;
173
    /**
174
     * A function to invoke to create a value for this `token`. The function is invoked with
175
     * resolved values of `token`s in the `deps` field.
176
     */
177
    useFactory: Function;
178
    /**
179
     * A list of `token`s which need to be resolved by the injector. The list of values is then
180
     * used as arguments to the `useFactory` function.
181
     */
182
    deps?: any[];
183
    /**
184
     * If true, then injector returns an array of instances. This is useful to allow multiple
185
     * providers spread across many files to provide configuration information to a common token.
186
     *
187
     * ### Example
188
     *
189
     * {@example core/di/ts/provider_spec.ts region='MultiProviderAspect'}
190
     */
191
    multi?: boolean;
192
}
193
/**
194
 * @whatItDoes Describes how the {@link Injector} should be configured.
195
 * @howToUse
196
 * See {@link TypeProvider}, {@link ValueProvider}, {@link ClassProvider}, {@link ExistingProvider},
197
 * {@link FactoryProvider}.
198
 *
199
 * @description
200
 * For more details, see the {@linkDocs guide/dependency-injection "Dependency Injection Guide"}.
201
 *
202
 * @stable
203
 */
204
export declare type Provider = TypeProvider | ValueProvider | ClassProvider | ExistingProvider | FactoryProvider | any[];
(5-5/9)