何时在角度2中使用@Inject?

时间:2016-10-20 09:00:48

标签: angular dependency-injection

当我想注入自己编写的服务时,我使用@Inject装饰器:

export class ScheduleComponent {

    constructor(@Inject(ConnectionsApi) private connectionsApi: ConnectionsApi ) { }
}

但是,如果我使用像Http这样的Angular提供的服务,则没有必要:

export class ConnectionsApi {

    constructor(protected http: Http) {}
}

为什么不同?

1 个答案:

答案 0 :(得分:1)

如果ConnectionsApi是一个类,并且要为此类注册的注入值提供者,那么您不需要@Inject()

对于所有其他情况,您需要@Inject()

  • 您无法为stringnumberbooleanObject等原始类型注册提供商,因为它们不够具体。

  • 您无法为接口类型注册提供程序,因为它们在运行时不可用。

{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) {}

另见