@@ -189,34 +189,41 @@ code-example(format, language="html").
189
189
+ includeShared('{ts}' , 'providers-aliased-1' )
190
190
+ makeExample('dependency-injection/dart/lib/providers_component.dart' ,'providers-6a' )( format ="." )
191
191
+ includeShared('{ts}' , 'providers-aliased-2' )
192
- + makeExample('dependency-injection/dart/lib/providers_component.dart' ,'providers-6b' )( format ="." )
192
+ - var stylePattern = { otl: / (useExisting. * \) )/ gm };
193
+ + makeExample('dependency-injection/dart/lib/providers_component.dart' ,'providers-6b' ,'' , stylePattern)( format ="." )
193
194
194
195
+ includeShared('{ts}' , 'providers-value-1' )
195
196
:marked
196
197
By specifying a `useValue` parameter to `Provider`,
197
198
we can provide objects directly,
198
199
instead of asking the injector to create an instance of a class.
199
200
200
- In Dart code, `useValue` is handy for passing configuration information,
201
- often using literals such as strings, lists, and maps.
201
+ Because Dart annotations must be compile-time constants,
202
+ `useValue` is often used with string or list literals.
203
+ However, you can also use `useValue` with constant objects.
202
204
203
- + makeExample('dependency-injection/dart/lib/providers_component.dart' ,'providers-usevalue' )( format ="." )
205
+ To create a class that can provide constant objects,
206
+ make sure all its instance variables are `final`,
207
+ and give it a `const` constructor:
208
+
209
+ + makeExample('dependency-injection/dart/lib/app_config.dart' ,'const-class' ,'lib/app_config.dart (excerpt)' )( format ='.' )
210
+
211
+ :marked
212
+ To create a constant instance of that class, use `const` instead of `new`:
213
+
214
+ + makeExample('dependency-injection/dart/lib/app_config.dart' ,'const-object' ,'lib/app_config.dart (excerpt)' )( format ='.' )
215
+
216
+ :marked
217
+ Then specify the object using the `useValue` argument to `Provider`:
218
+
219
+ - var stylePattern = { otl: / (useValue. * \) )/ gm };
220
+ + makeExample('dependency-injection/dart/lib/providers_component.dart' ,'providers-9' ,'' , stylePattern)( format ='.' )
204
221
205
222
:marked
206
223
See more `useValue` examples in the
207
224
[Non-class dependencies](#non-class-dependencies) and
208
225
[OpaqueToken](#opaquetoken) sections.
209
226
210
- .callout.is-helpful
211
- header Dart difference: Creating objects
212
- :marked
213
- TypeScript Angular code sometimes uses `useValue` to pass in
214
- objects created without using a constructor.
215
- Dart doesn't support instantiating random objects outside of constructors.
216
- Another reason `useValue` is less common in Dart is that
217
- the argument's value must be constant
218
- (because Dart annotations must have constant values).
219
-
220
227
+ includeShared('{ts}' , 'providers-factory-1' )
221
228
+ makeExample('dependency-injection/dart/lib/heroes/hero_service.dart' ,'internals' , 'lib/heroes/hero_service.dart (excerpt)' )( format ='.' )
222
229
+ includeShared('{ts}' , 'providers-factory-2' )
@@ -225,7 +232,7 @@ code-example(format, language="html").
225
232
+ makeExample('dependency-injection/dart/lib/heroes/hero_service_provider.dart' ,'provider' , 'lib/heroes/hero_service_provider.dart (excerpt)' )( format ='.' )
226
233
+ includeShared('{ts}' , 'providers-factory-4' )
227
234
+ includeShared('{ts}' , 'providers-factory-5' )
228
- - var stylePattern = { pnk : / (providers. * ),$ / gm };
235
+ - var stylePattern = { otl : / (providers. * ),$ / gm };
229
236
+ makeTabs(
230
237
` dependency-injection/dart/lib/heroes/heroes_component.dart,
231
238
dependency-injection/dart/lib/heroes/heroes_component_1.dart` ,
@@ -247,6 +254,7 @@ code-example(format, language="html").
247
254
every class implicitly defines an interface,
248
255
so interface names are just class names.
249
256
+ includeShared('{ts}' , 'tokens-non-class-deps-1' )
257
+ [PENDING: fix!!]
250
258
+ makeExample('dependency-injection/dart/lib/app_config.dart' ,'config' ,'lib/app_config.dart (excerpt)' )( format ='.' )
251
259
:marked
252
260
We know we can register an object with a [value provider](#value-provider).
0 commit comments