2

I'm reading the ng-book on angular 2 revision 47 page 250 and there is the following passage:

When we put the class itself into the list of providers like this:

providers: [ MyService ] 

That is telling Angular that we want to provide a singleton instance of MyService whenever MyService is injected. Because this pattern is so common, the class by itself is shorthand notation for the following, equivalent configuration:

providers: [
    { provide: MyComponent, useClass: MyComponent }
]

Is it a typo and what is meant should be:

providers: [
    { provide: MyService, useClass: MyService }
]
Max Koretskyi
  • 101,079
  • 60
  • 333
  • 488

3 Answers3

2

Yes, it's the same. When the type passed to provide and useClass is the same, then it's equivalent to just pass the type.

Just a hint. Providing a component (MyComponent) usually doesn't make sense.

Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567
2

It's typo, since you can't use components as Providers, here's the official docs

The Provider class and provide object literal We wrote the providers array like this:

providers: [Logger]

This is actually a shorthand expression for a provider registration using a provider object literal with two properties:

[{ provide: Logger, useClass: Logger }]

The first is the token that serves as the key for both locating a dependency value and registering the provider.

The second is a provider definition object, which we can think of as a recipe for creating the dependency value. There are many ways to create dependency values ... and many ways to write a recipe

Fabio Antunes
  • 22,251
  • 15
  • 81
  • 96
0

Yes, both of them are same. When you write providers: [MyService] angular will expand this into [{ provide: MyService, useClass: MyService}] where the first parameter provide: MyService will work as a Dependency injection token that will work as a key to locate "MyService" and the second parameter useClass: MyService it will create dependency from the existing service class MyService