angular - परिपत्र निर्भरता इंजेक्शन कोणीय 2




dependency-injection circular-dependency (2)

आप उन सेवाओं में से एक के बजाय Injector इंजेक्ट करके परिपत्र निर्भरता को हल कर सकते हैं जो परिपत्र निर्भरता का कारण बनते हैं

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

मैं services को एक-दूसरे में इंजेक्ट services संघर्ष कर रहा हूं। कंस्ट्रक्टर्स और डिपेंडेंसी इंजेक्शन में निम्नलिखित ब्लॉग सर्कुलर डिपेंडेंसी एक तरह से भ्रमित करने वाला है जहाँ यह कहता है

दो वस्तुओं में से एक दूसरी वस्तु C को छिपा रही है

सेवा वर्ग को एक दूसरे में इंजेक्ट करते समय मुझे निम्नलिखित त्रुटि मिलती है

पेरोल सर्विस के लिए सभी मापदंडों को हल नहीं किया जा सकता है: (साइटसेवा, संग्रहण सेवा, स्वीटएर्ट सर्विस,)?

//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);
   }
}

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

धन्यवाद


मुझे पता है कि पोस्ट पुरानी है, लेकिन धन्यवाद वैसे भी उपरोक्त समाधान ने मेरे लिए काम किया है क्योंकि मुझे चक्रीय निर्भरता की समस्या थी, इसलिए मुझे संवाद करने के लिए मध्यस्थ सेवा बनाने से बचने के लिए इंजेक्टर का उपयोग करना होगा, हालांकि उपरोक्त समाधान में एक सुधार

कोणीय 5 के बाद से हमें उपयोग करने की आवश्यकता है:

प्रदाता: [{प्रदान करें: "MyServiceName", useclass: MyServiceClass}],

और फिर

injector.get ( 'MyServiceName')

हालाँकि, पटरी से उतर गया है





circular-dependency