在 angular 2 应用程序的 NgModule 导入部分中注入依赖项

Injecting dependencies inside the NgModule import section of an angular 2 app

我需要能够从 NgModule 的导入部分注入和使用 angular 2 服务(下面称为 SomeService):

...
imports: [
    BrowserModule,
    RouterModule.forRoot(AppRoutes, {useHash: true}),
    HttpModule,
    ReactiveFormsModule,
    NgbModule,
    StoreModule.provideStore({
        currentUserAccount: someFunction(currentUserAccountReducer, someService),
        authenticated: someFunction(authenticatedReducer, someService)
      },
      {
        authenticated: false
      })
  ],
  ...

我需要它,因为我需要使用来自普通函数(上面命名为 someFunction)的全功能服务(取决于 Http)来补充 ngrx 商店 应用程序。

这里someFunction是一个meta reducer。

请参阅 ngrx 商店应用程序中 meta reducer 的概念。

有人可以帮忙吗?

不完全确定我理解你正在尝试做什么(没有看到更多代码),但我想你正在尝试做的事情可以通过使用提供者配置的工厂来完成

providers: [
  {
    provide: WhateverService,
    useFactory: (things: Things, to: To, inject: Inject) => {
      // Not 100% sure, but I believe the return should be 
      // synchronous. If you have some asynchronous actions
      // to be resolved first, you may just want to pass the 
      // Promise or Observable to the constructor
      return new WhateverService(...);
    },
    deps: [Things, To, Inject]
  }
]

在你的 StoreModule 中,它可能类似于

@NgModule({})
export class StoreModule {
  static provideStore(variable) {
    return {
      ngModule: StoreModule,
      providers: [
        {
          provide: WhateverService,
          useFactory: (things: Things, to: To, inject: Inject) => {
            // use variable here
            return new WhateverService(...);
          },
          deps: [Things, To, Inject]
        }
      ]
    }    
  }
}

如果您尝试在 bootstrap 之前解析某些远程数据,另一种选择是执行类似 的操作。除此之外,我可能完全不了解,因为我对 ngrx 不熟悉。