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

时间:2016-09-21 21:29:17

标签: angular angular2-services ngrx

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

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

我需要这个,因为我需要使用普通函数(上面名为Http)的全功能服务(取决于someFunction),以便重新补充 ngrx商店应用。

此处someFunction是元缩减器。

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

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我不完全确定我明白你要做什么(没有看到更多代码),但我想你可以通过使用工厂进行提供程序配置来完成你想要做的事情

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]
        }
      ]
    }    
  }
}

如果您尝试在引导之前解析某些远程数据,则另一个选项是执行this之类的操作。除此之外,我可能完全不在,因为我不熟悉ngrx。