Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 是否可以基于现有服务动态导入模块?_Angular - Fatal编程技术网

Angular 是否可以基于现有服务动态导入模块?

Angular 是否可以基于现有服务动态导入模块?,angular,Angular,我有一个现有的服务,它是一个服务集合,使用名为EFFECTS的不透明标记注册。本质上,服务只是共享同一接口的子服务数组 对于每个EFFECTS服务,我想将EffectsModule导入AppModule并将每个服务注入EffectsModule.run()方法 请参阅下文: import { NgModule } from '@angular/core'; import { Actions, EffectsModule } from '@ngrx/effects'; import { Shar

我有一个现有的服务,它是一个服务集合,使用名为
EFFECTS
的不透明标记注册。本质上,服务只是共享同一接口的子服务数组

对于每个
EFFECTS
服务,我想将
EffectsModule
导入
AppModule
并将每个服务注入
EffectsModule.run()
方法

请参阅下文:

import { NgModule } from '@angular/core';
import { Actions, EffectsModule } from '@ngrx/effects';

import { SharedModule } from '../shared/shared.module';

import { Account, User } from './models';
import { AccountEffects, UserEffects } from './effects';
import { ApiService } from '../core/services/api.service';
import { EFFECTS } from './tokens';

@NgModule({
  imports: [
    SharedModule,
    { 
      // HOW??
      useFactory: (effects) => effects.map(effect => EffectsModule.run(effect)), 
      deps: [EFFECTS],
    }
  ],
  providers: [
    {
      provide: EFFECTS,
      useClass: UserEffects,
      useFactory: (Actions, ApiService) => new AccountEffects(Actions, ApiService, Account),
      multi: true,
      deps: [Actions, ApiService]
    },
    {
      provide: EFFECTS,
      useClass: UserEffects,
      useFactory: (Actions, ApiService) => new UserEffects(Actions, ApiService, User),
      multi: true,
      deps: [Actions, ApiService]
    },
  ],
})
export class AppModule { } 

可以这样做吗?

不,不可能。这显然是XY问题,但解决方案可能会有所不同。首先,这是一个特定于
@ngrx/effects
及其固有模式的问题。我建议用更多的细节和ngrx的特异性来重新提问,因为这对于不是ngrx/redux专家的开发者来说没有多大意义。不同意。随着生态系统的扩展,其他开发人员可能会遇到这种架构模式。这是框架工作方式所施加的限制。在其他场景中,开发人员不受基于现有服务需求导入模块的限制;这种方法通常不应该被采用,因为它会导致死胡同。不,这是不可能的。这显然是XY问题,但解决方案可能会有所不同。首先,这是一个特定于
@ngrx/effects
及其固有模式的问题。我建议用更多的细节和ngrx的特异性来重新提问,因为这对于不是ngrx/redux专家的开发者来说没有多大意义。不同意。随着生态系统的扩展,其他开发人员可能会遇到这种架构模式。这是框架工作方式所施加的限制。在其他场景中,开发人员不受基于现有服务需求导入模块的限制;这种方法通常不应该被采用,因为它会导致死胡同。