कैसल विंडसर नियंत्रण उपकरण का एक उलटा है। इसके जैसे और भी हैं।
यह आपको पूर्व-निर्मित और पूर्व-वायर्ड निर्भरता वाले ऑब्जेक्ट दे सकता है। "नया" ऑपरेटर के बजाय प्रतिबिंब और कॉन्फ़िगरेशन के माध्यम से बनाया गया एक संपूर्ण ऑब्जेक्ट ग्राफ।
यहां से शुरू करें: http://tech.groups.yahoo.com/group/altdotnet/message/10434
कल्पना कीजिए कि आपके पास एक ईमेल भेजने वाली कक्षा है। EmailSender। कल्पना कीजिए कि आपके पास एक और क्लास वर्कफ़्लोस्टेपर है। WorkflowStepper के अंदर आपको EmailSender का उपयोग करने की आवश्यकता है।
आप हमेशा कह सकते हैं new EmailSender().Send(emailMessage);
लेकिन वह - का उपयोग new
एक तंग आवरण बनाता है जिसे बदलना मुश्किल है। (यह सब के बाद एक छोटे से वंचित उदाहरण है)
तो क्या हुआ अगर, इस बुरे लड़के को WorkflowStepper के अंदर नया करने के बजाय, आपने इसे कंस्ट्रक्टर में पास कर दिया?
तो फिर जिसने भी फोन किया उसे EmailSender को नया करना था।
new WorkflowStepper(emailSender).Step()
कल्पना कीजिए कि आपके पास इन सैकड़ों छोटी कक्षाएं हैं जिनमें केवल एक जिम्मेदारी है (google SRP) .. और आप उनमें से कुछ का उपयोग वर्कफ़्लो में करते हैं:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
कल्पना करें कि EmailSender
जब आप लिख रहे हों WorkflowStepper
या जब आप विवरण के बारे में चिंता न करेंAlertRegistry
आप सिर्फ उस चिंता की चिंता करते हैं जिसके साथ आप काम कर रहे हैं।
कल्पना करें कि वस्तुओं और निर्भरताओं के इस पूरे ग्राफ (वृक्ष) को RUN TIME पर तार दिया जाता है, ताकि जब आप ऐसा करें:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
आपको WorkflowStepper
उन सभी निर्भरताओं के साथ एक वास्तविक सौदा मिल जाता है, जो आपको उनकी ज़रूरत होती है।
कोई नहीं है new
यह बस होता है - क्योंकि यह जानता है कि क्या जरूरत है।
और आप बेहतर डिजाइन, कम परीक्षण और दोहराने योग्य तरीके से DRY कोड के साथ कम दोष लिख सकते हैं।