У меня проблема с импортом и повторным использованием модуля, реализованного с использованием 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)
)
});
}