अंगूठे मैं अक्सर उपयोग के नियम यह है कि मैं चीजें हैं जो ठीक से इकाई परीक्षण लेखन के रास्ते में हैं इंजेक्षन है। ऐसा करने पर आप कभी-कभी बीसीएल कक्षाओं (जैसे डेटटाइम) को सारणित कर देते हैं।अब, फ़ाइल, आदि), और कभी-कभी अपनी खुद की चीजें। इंजेक्ट करने के लिए अच्छी चीजें सेवाएं हैं (जैसे कि आईसी कस्टमर सेवा, आईसी कस्टमर यूनीटऑफवर्क्स फैक्ट्री, या आईसी कस्टमर रिपोजिटरी)। संस्थाओं, डीटीओ और संदेशों जैसी चीजों को इंजेक्ट न करें।
हालांकि वस्तुओं को इंजेक्शन देने के अन्य कारण हैं, जैसे कि बाद में मॉड्यूल को प्रतिस्थापित करने में सक्षम होना (उदाहरण के लिए सत्यापन, यूआई, या ओ/आरएम के लिए स्विच कार्यान्वयन), टीमों के भीतर या समानांतर समानांतर विकास की अनुमति देने के लिए, और रखरखाव कम करने के लिए।
मैं निर्माता इंजेक्शन का उपयोग करना पसंद है और अक्सर देखा है कि मैं के बारे में 5 या अधिक वस्तुओं की जरूरत है निर्माता में इंजेक्ट किया जा करने के लिए।
जैसा कि आपने पहले से ही स्वयं को नोट किया है, SRP का पालन न करने के कारण कई निर्भरताएं हो सकती हैं। हालांकि, आप आम निर्भरताओं को समूहीकृत कर रहे हैं, जिसमें कुल सेवा में तर्क है और उपभोक्ताओं में इंजेक्ट करें। मार्क सीमैन के लेख को Aggregate Services के बारे में भी देखें।
वस्तुओं कि आवेदन विन्यास या उन छोटे util वर्गों की तरह सच एकमात्र हैं, तो आप उन्हें इंजेक्षन करते हैं?
मैं व्यक्तिगत रूप से जिस तरह से Ayende यह प्रस्ताव के एक प्रशंसक नहीं हूँ। यह एक Ambient Context है, जो service locator निर्माण का एक विशिष्ट प्रकार है। ऐसा करने से निर्भरता छिप जाती है, क्योंकि कक्षाएं उस स्थैतिक वर्ग को बिना इंजेक्ट किए बगैर कॉल कर सकती हैं। स्पष्ट रूप से इंजेक्शन करने से यह बहुत स्पष्ट हो जाता है कि आपको यूनिट परीक्षण समय की आवश्यकता होती है। इसके अलावा, एमएसटीएस्ट जैसे ढांचे के लिए परीक्षण लिखना मुश्किल हो जाता है जो समानांतर में परीक्षण चलाते हैं। किसी भी countermeasures के बिना, यह आपके परीक्षणों को बहुत अविश्वसनीय बनाता है। एक बेहतर समाधान - DateTime.Now
उदाहरण के लिए- इंटरफ़ेस होना चाहिए, जैसा कि here सुझाया गया है। जैसा कि आप देख सकते हैं, वह उत्तर आयेंड दृष्टिकोण से बहुत अधिक है, जो एक ही SO प्रश्न में दिखाया गया है।
इस तरह के प्रवेश के रूप में
आम वस्तुओं, कि लगभग हर वस्तु में उपयोग किया जाता, वे इंजेक्शन किया जाना चाहिए?
मैं उन्हें अपने कोड में इंजेक्ट करता हूं, क्योंकि इससे निर्भरता स्पष्ट हो जाती है। ध्यान दें, हालांकि, मेरे कोड में मुझे अभी भी कभी भी लॉगर इंजेक्ट करना पड़ता है। आप जिस लाइन को लॉग करना चाहते हैं उसके बारे में कठिन सोचें और यह वास्तव में विफलता नहीं है (या एक क्रॉस-कटिंग चिंता जिसे कहीं और रखा जाना चाहिए)। मैं आमतौर पर एक अपवाद फेंक देता हूं जब कुछ ऐसा हुआ जो मुझे उम्मीद नहीं थी। यह मुझे तेजी से बग खोजने की अनुमति देता है। या इसे दूसरे शब्दों में डालने के लिए: फ़िल्टर न करें, लेकिन तेजी से विफल हो जाएं। और कृपया अपने आप से पूछें: "Do I log too much?"
मुझे उम्मीद है कि इससे मदद मिलती है।
फिर अपने वर्ग पूरे पर निर्भर करता है उस वस्तु का और कहीं और उपयोग करना मुश्किल होगा। कॉन्फ़िगरेशन के विशिष्ट भाग को इंजेक्ट करने के लिए बेहतर है कि आपकी ऑब्जेक्ट परवाह है। –