当我想注入自己编写的服务时,我使用@Inject
装饰器:
export class ScheduleComponent {
constructor(@Inject(ConnectionsApi) private connectionsApi: ConnectionsApi ) { }
}
但是,如果我使用像Http
这样的Angular提供的服务,则没有必要:
export class ConnectionsApi {
constructor(protected http: Http) {}
}
为什么不同?
答案 0 :(得分:1)
如果ConnectionsApi
是一个类,并且要为此类注册的注入值提供者,那么您不需要@Inject()
对于所有其他情况,您需要@Inject()
。
您无法为string
,number
,boolean
,Object
等原始类型注册提供商,因为它们不够具体。
您无法为接口类型注册提供程序,因为它们在运行时不可用。
{provide: 'myStringToken': useValue: 123}
...
constructor(@Inject('myStringToken) private someConfig:number) {}
{provide: 'myStringToken': useClass: MyConfigurationClass}
...
constructor(@Inject('myStringToken) private someConfig:MyConfigurationInterface) {}
{provide: someOpaqueToken : useClass: MyConfigurationClass}
...
constructor(@Inject(someOpaqueToken) private someConfig:MyConfigurationInterface) {}
{provide: someOpaqueToken : useClass: MyClassThatImplementsX}
...
constructor(@Inject(someOpaqueToken) private someConfig:X) {}
另见