// 简写形式
providers: [Logger]
// 完整形式
[{ provide: Logger, useClass: Logger }]
// 使用不同的类,下列代码告诉注入器,当有人请求 Logger 时,返回 BetterLogger
[{ provide: Logger, useClass: BetterLogger }]
// 简写和完整形式混合使用
[ UserService,
{ provide: Logger, useClass: EvenBetterLogger }]
// 试图让OldLogger成为NewLogger的别名,但不幸的是,这里创建了两个实例
[ NewLogger,
// Not aliased! Creates two instances of `NewLogger`
{ provide: OldLogger, useClass: NewLogger}]
// 使用useExisting,解决上面问题,只创建了一个实例
[ NewLogger,
// Alias OldLogger w/ reference to NewLogger
{ provide: OldLogger, useExisting: NewLogger}]
// silentLogger是一个现成对象,使用useValue直接用现成对象来取代logger
[{ provide: Logger, useValue: silentLogger }]