मुझे लगता है कि उत्तर सही हैं लेकिन मुझे लगता है कि कुछ गायब है।
जो चीज़ गायब है वह "क्यों और क्या हल करती है?"।
ठीक है चलो शुरू करें।
पहले कुछ जानकारी का उल्लेख करते हैं:
सभी मॉड्यूल रूट सेवाओं तक पहुंच रखते हैं।
तो यहां तक कि आलसी लोड किए गए मॉड्यूल एक सेवा का उपयोग कर सकते हैं जो कि प्रदान किया गया था app.module
।
क्या होगा यदि एक आलसी लोडेड मॉड्यूल खुद को एक सेवा प्रदान करेगा जो ऐप मॉड्यूल पहले से ही प्रदान करता है? वहाँ हो जाएगा 2 उदाहरणों।
यह एक समस्या नहीं है, लेकिन कभी-कभी यह है ।
हम इसे कैसे हल कर सकते हैं? बस उस प्रदाता के साथ एक मॉड्यूल को आलसी लोड किए गए मॉड्यूल पर आयात न करें।
कहानी का अंत।
यह ^ केवल यह दिखाने के लिए था कि आलसी लोड किए गए मॉड्यूल का अपना इंजेक्शन बिंदु है (गैर-आलसी-लोड किए गए मॉड्यूल के विपरीत)।
लेकिन तब क्या होता है जब एक साझा (!) मॉड्यूल घोषित किया जाता है providers
, और वह मॉड्यूल आलसी द्वारा आयात किया जाता है और app.module
? फिर, जैसे हमने कहा, दो उदाहरण।
तो हम इसे साझा मॉड्यूल POV में कैसे हल कर सकते हैं? हमें उपयोग न करने का एक तरीका चाहिएproviders:[]
! क्यों? क्योंकि वे आलसी और app.module दोनों का आयात करने वाले ऑटो होंगे और हम नहीं चाहते कि जैसा कि हमने देखा कि प्रत्येक का एक अलग उदाहरण होगा।
खैर, यह पता चला है कि हम एक साझा मॉड्यूल की घोषणा कर सकते हैं जो कि नहीं होगा providers:[]
, लेकिन फिर भी, प्रदाताओं को प्रदान करेगा (क्षमा करें :))
कैसे? ऐशे ही :
ध्यान दें, कोई प्रदाता नहीं।
परंतु
सम्मेलन के माध्यम से मैनुअल तंत्र में प्रवेश:
आप देखेंगे कि तस्वीरों में प्रदाताओं service1
और हैservice2
यह हमें service2
आलसी लोड किए गए मॉड्यूल और service1
गैर-आलसी मॉड्यूल के लिए आयात करने की अनुमति देता है । ( खांसी ... राउटर .... खांसी )
BTW, कोई भी आपको forRoot
एक आलसी मॉड्यूल के भीतर कॉल करने के लिए नहीं रोक रहा है । लेकिन आपके पास 2 उदाहरण होंगे क्योंकि app.module
यह भी करना चाहिए - इसलिए इसे आलसी मॉड्यूल में न करें।
इसके अलावा - अगर app.module
कॉल forRoot
(और कोई भी कॉल नहीं forchild
) - यह ठीक है, लेकिन रूट इंजेक्टर केवल होगा service1
। (सभी ऐप के लिए उपलब्ध)
तो हमें इसकी आवश्यकता क्यों है? मेरे अनुसार :
यह एक साझा मॉड्यूल, करने में सक्षम होने की अनुमति देता विभाजित के माध्यम से - उत्सुक मॉड्यूल और आलसी मॉड्यूल के साथ इस्तेमाल किया जा करने के लिए अपने अलग-प्रदाताओं forRoot
और forChild
सम्मेलन। मैं दोहराता हूं: सम्मेलन
बस।
रुको !! सिंगलटन के बारे में एक शब्द भी नहीं ?? तो मैं हर जगह सिंगलटन क्यों पढ़ता हूं?
अच्छा - यह ऊपर के वाक्य में छिपा है ^
यह एक साझा मॉड्यूल की अनुमति देता है, अपने विभिन्न-प्रदाताओं को उत्सुक मॉड्यूल और आलसी मॉड्यूल के साथ उपयोग करने में सक्षम होने के लिए - forRoot और forCild के माध्यम से विभाजित करने में सक्षम बनाता है ।
सम्मेलन या अधिक सटीक होना करने के लिए - - अगर आप का पालन नहीं होगा - आप होगा (!!!) यह सिंगलटन होने की अनुमति देता नहीं एक सिंगलटन मिलता है।
तो अगर आप केवल लोड forRoot
में app.module
है, तो आप केवल एक उदाहरण मिलता है क्योंकि आप केवल बुलाना चाहिए forRoot
में app.module
।
BTW - इस बिंदु पर आप के बारे में भूल सकते हैं forChild
। आलसी लोड किए गए मॉड्यूल को कॉल नहीं करना चाहिए forRoot
- इसलिए आप सिंगल ऑफ़ पीओएल में सुरक्षित हैं।
forRoot और forChild एक अटूट पैकेज नहीं है - यह सिर्फ इतना है कि रूट के लिए कॉल करने का कोई मतलब नहीं है जो स्पष्ट रूप से केवल app.module
आलसी मॉड्यूल की क्षमता दिए बिना लोड किया जाएगा , उनकी अपनी सेवाएं हैं, बिना नई सेवाएं बनाए -singleton।
यह सम्मेलन आपको एक अच्छी क्षमता देता है जिसे forChild
"केवल आलसी लोड किए गए मॉड्यूल के लिए सेवाओं" का उपभोग करना कहा जाता है ।
यहां एक डेमो रूट प्रदाता सकारात्मक संख्या देता है, आलसी लोडेड मॉड्यूल नकारात्मक संख्या देता है।