Импорт модуля, реализованного в ngrx, и повторное использование эффекта с переопределенным сервисом - PullRequest
0 голосов
/ 11 июня 2018

У меня проблема с импортом и повторным использованием модуля, реализованного с использованием ngrx.В простой реализации Angular ниже приведен вариант использования

// Module
@NgModule({
    imports: [
        CommonModule
    ],
    declarations: [BaseComponent],
    exports: [
        BaseComponent
    ],
    providers: [
        BaseService
    ]
})
export class BaseModule { }

//component
@Component({
  selector: 'base-comp',
  templateUrl: './base.component.html',
  styleUrls: ['./base.component.css']
})
export class BaseComponent implements OnInit {

  constructor(public service: BaseService) { }

  ngOnInit() {
  }

}

Если я импортирую BaseModule в другой модуль, переопределю службу и использую компонент 'base-comp', я получу экземпляр OverriddenService, внедренный в BaseComponent

// module
@NgModule({
    imports: [
        CommonModule,
        RouterModule.forChild([{
            path: '',
            component: SecondComponent
        }]),
        BaseModule,
    ],
    declarations: [SecondComponent],
    providers: [
        { provide: BaseService, useClass: OverridenService }
    ]
})
export class SecondModule { }

Это все работает как положено.Теперь, если у меня есть модуль, реализованный с использованием ngrx, и сервис вводится в конструктор в BaseEffect (base-effect.ts) - как достичь того же результата?Если я зарегистрирую новый эффект во Втором Модуле, на одну и ту же операцию будут подписаны две подписки.

 @Injectable()
export class BaseEffect {
  constructor(private actions$: Actions,
    private service: BaseService
  ) {
  }

  // Listing
  @Effect()
  listSegments$: Observable<Action> = this.actions$.ofType<MyAction>(MY_ACTION)
    .map((action: MyAction) => action.payload)
    .mergeMap((payload: Query) => {
      return this.service.getList(payload).map(response =>
        new ActionComplete(response)
      )
    });
}
...