I'm running into a circular dependency created by my custom Injector
The code runs fine until it reaches this line:
const componentPortal = new ComponentPortal(ConfirmDialogComponent, null, customInjector);
Which produces the following error in the terminal and browser's console:
WARNING in Circular dependency detected: src\app\confirm-dialog.service.ts -> src\app\confirm-dialog\confirm-dialog.component.ts -> src\app\confirm-dialog.service.ts
WARNING in Circular dependency detected: src\app\confirm-dialog\confirm-dialog.component.ts -> src\app\confirm-dialog.service.ts -> src\app\confirm-dialog\confirm-dialog.component.ts
And produces this error in the browser's console:
Uncaught Error: Can't resolve all parameters for ConfirmDialogComponent: (?).
@Injectable({
providedIn: 'root'
})
export class ConfirmDialogService {
constructor(
private overlay: Overlay,
private injector: Injector,
) { }
public open() {
const overlayRef = this.overlay.create();
const dialogRef = new CustomOverlayRef(overlayRef);
const customInjector = this.createInjector(dialogRef);
const componentPortal = new ComponentPortal(ConfirmDialogComponent, null, customInjector);
const componentRef = overlayRef.attach(componentPortal);
}
private createInjector(customOverlayRef: CustomOverlayRef) {
const injectionTokens = new WeakMap();
injectionTokens.set(CustomOverlayRef, customOverlayRef);
return new PortalInjector(this.injector, injectionTokens);
}
}
export class CustomOverlayRef {
constructor(
private overlayRef: OverlayRef,
) { }
public close() {
this.overlayRef.dispose();
}
@Component({
selector: 'app-confirm-dialog',
templateUrl: './confirm-dialog.component.html',
styleUrls: ['./confirm-dialog.component.scss']
})
export class ConfirmDialogComponent implements OnInit {
constructor(
private customDialogRef: CustomOverlayRef,
) { }
ngOnInit() {
}
public close() {
this.customDialogRef.close();
}
}