Inyección circular de dependencia angular 2

He estado luchando por inyectar services uno al otro. El siguiente blog Dependencia circular en constructores e Inyección de dependencia es un poco confuso donde dice

Uno de los dos objetos está ocultando otro objeto C

Recibo el siguiente error al inyectar clase de servicio entre sí

No se pueden resolver todos los parámetros para PayrollService: (SiteService, StorageService, SweetAlertService,?)

 //abstractmodal.service.ts @Injectable() export abstract class AbstractModel { abstract collection = []; constructor(private siteService: SiteService, private storageService: StorageService, private sweetalertService: SweetAlertService) {} setCollectionEmpty() { this.collection = []; } } //account-payable.service.ts @Injectable() export class AccountPayableService extends AbstractModel { public collection = []; constructor(private sS: SiteService,private stS: StorageService, private sws: SweetAlertService, private accpPoService: PayablePurchaseOrderService, private attachmentService: AttachmentService, private injectorService: InjectorService) { super(sS, stS, sws); } } //injector.service.ts @Injectable() export class InjectorService { constructor(private payrollService: PayrollService) {} cleanPayrollCollection() { this.payrollService.setCollectionEmpty(); } } //payroll.service.ts @Injectable() export class PayrollService extends AbstractModel { public collection = []; constructor(private sS: SiteService,private stS: StorageService, private sws: SweetAlertService, private accpService: AccountPayableService) { super(sS, stS, sws); } } 

Sus comentarios y respuestas serán apreciados mucho.

Gracias

    Puede solucionar dependencias circulares inyectando Injector lugar de uno de los servicios que causan la dependencia circular

     private payrollService:PayrollService; constructor(/*private payrollService:PayrollService*/ injector:Injector) { setTimeout(() => this.payrollService = injector.get(PayrollService)); } 

    En mi caso (Angular 4 en un proyecto Iónico), incluso la inyección del servicio justo antes de su uso (tras la interacción del usuario) no funcionaba (el mismo “No se pueden resolver todos los parámetros …” al inicio).

    Lo que funcionó para mí fue inyectar (y así proporcionar) el servicio por su nombre .

    Entonces en mi módulo de aplicación:

     ... providers: [{provide: "MyServiceName", MyServiceClass}], ... 

    Y cuando sea necesario:

     const myService: MyServiceClass = injector.get("MyServiceName"); ... 

    Sé que la publicación es antigua, pero gracias de todos modos la solución anterior funcionó porque tenía un problema de dependencia cíclica, así que tengo que usar un inyector para evitar crear un servicio de mediación para comunicarme, aunque una corrección en la solución anterior

    Desde Angular 5 en adelante, necesitamos usar:

    proveedores: [{provide: “MyServiceName”, useclass: MyServiceClass}],

    y entonces

    injector.get (‘MyServiceName’)

    aunque get es derruido