我如何获得 angular2 依赖注入以与价值提供者一起工作

how do I get angular2 dependency injection to work with value providers

我正在关注有关依赖注入的 angular 文档,并尝试复制 dependency injection tokens 上的部分。但很明显我还是不明白。

我正在尝试使用 value providerconfig:any 注入到我的项目中。

在最简单的层面上,我只想provide一个常量字符串

// app-modules.ts
const CFG_STRING = "I was declared externally and injected in ngModule"    
@NgModule({
  imports: [ BrowserModule ],
  declarations: [ App ],
  providers: [
    {provide: CFG_STRING, useValue: CFG_STRING}
  ],
  bootstrap: [ App ]
})

inject到组件构造器

// app.ts
const LOCAL_STRING = "I was declared in the local module"
export class App {
  constructor(
    // @Optional() cfgString: CFG_STRING
  ) {
    this.name = 'Angular2'
    this.local = LOCAL_STRING

    /* provided/injected */
    // this.injectedStr = cfgString
  }
}

但是当我这样做时,应用程序无法正确 运行。我做错了什么?

这是一个 plunkr:http://plnkr.co/edit/sQwxyDqLkMTgVUjJ1yYF?p=preview

如果您不使用类型作为提供者的密钥,而是使用字符串或 OpaqueToken,您需要将密钥传递给 @Inject()

constructor(
    @Inject('CFG_STRING') /* @Optional()*/ cfgString: CFG_STRING
  ) {

并像

一样提供
  providers: [
    {provide: 'CFG_STRING', useValue: CFG_STRING}
  ],

CFG_STRING 不是类型,因此不能用作键。你要么使用一些字符串,要么提到一个 OpaqueToken。可以是任意字符串,只需要匹配 provide@Inject()