2016-11-10 24 views
9

मैं एक दूसरे में services इंजेक्शन के आसपास संघर्ष कर रहा हूं। निम्न ब्लॉग Circular Dependency in constructors and Dependency Injection तरह का भ्रामक जहां लिखा हैपरिपत्र निर्भरता इंजेक्शन कोणीय 2

दो वस्तुओं में से एक किसी अन्य वस्तु सी

मैं जबकि एक दूसरे को

में सेवा वर्ग इंजेक्शन लगाने के निम्न त्रुटि प्राप्त छिपा है

पेरोल सेवा के लिए सभी पैरामीटर को हल नहीं कर सकता: (साइट सेवा, संग्रहण सेवा, 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); 
    } 
} 

आपकी टिप्पणियां और उत्तर बहुत सराहना की जाएगी।

धन्यवाद

उत्तर

20

आप Injector के बजाय सेवाओं है कि सर्कुलर निर्भरता

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

'अधिकतम कॉल स्टैक आकार exceeded' –

+0

मैं हटा देने के बाद' कारण से एक इंजेक्शन लगाने के द्वारा परिपत्र निर्भरता वैकल्पिक हल कर सकते हैं InjectorService 'और' इंजेक्टर ' –

+0

के माध्यम से दोनों सेवाओं को इंजेक्शन देने का प्रयास किया और यह काम किया? 'setTimout() 'चक्र को तोड़ने के लिए भी आवश्यक हो सकता है (याद रखें)। –

संबंधित मुद्दे