मैंने structure map का उपयोग किया है। आपका बाकी का सवाल बहुत भरा हुआ है। मैं एक उदाहरण में अवधारणा को समझाने की कोशिश करूंगा।
मान लीजिए कि आपने ऐसी वेबसाइट बनाई है जो पेपैल के माध्यम से भुगतान स्वीकार करेगी। पेपैल अब निर्भरता है। लेकिन आप एक विशिष्ट पेपैल प्रदाता के खिलाफ कोड नहीं करना चाहते हैं।
इसके बजाय आप बन जाएगा और कोड इस तरह एक अंतरफलक के खिलाफ ..
interface IPaymentProcessor
{
bool ProcessPayment(amount, ....);
}
सभी अपने पेपैल कोड एक वर्ग है कि अपने इंटरफेस के तरीकों को लागू करता है में रहते हैं होगा। उदाहरण के लिए PayPalPaymentProcessor
अब आपके पास एक ऑब्जेक्ट है जिसका उपयोग आप वास्तव में भुगतान को संसाधित करने के लिए करेंगे। यह एक नियंत्रक (asp.net-mvc, ViewModel-wpf) हो सकता है या यहां दिखाया गया एक वर्ग हो सकता है।
class PaymentProcessor
{
private IPaymentProcessor _processor = null;
public PaymentProcessor(IPaymentProcessor processor)
{
_processor = processor;
}
public bool ProcessTransaction(Transaction trans)
{
_processor.ProcessPayment(trans.amount, ...);
}
}
यह जहां एक आईओसी में आता है। इसके बजाय आप निर्माता मैन्युअल बुलाने की, तो आप एक आईओसी इंजेक्षन निर्भरता दिया जाएगा।
PaymentProcessor processor = ObjectFactory.GetInstance<PaymentProcessor>();
कोड का यह टुकड़ा संरचना नक्शा कहता है "जब भी आप एक निर्माता एक IPaymentProcessor की जरूरत है कि देखते हैं, एक नया PayPalPaymentProcessor वापसी"।
ObjectFactory.Initialize(x =>
{
x.ForRequestedType<IPaymentProcessor>().TheDefaultIsConcreteType<PayPalPaymentProcessor>();
});
यह मैपिंग आपके कार्यान्वयन कोड से अलग है और आप इसे बाद में थोड़ा सा रिफैक्टरिंग के साथ स्वैप कर सकते हैं। आईओसी के लिए बहुत कुछ है, लेकिन यह एक बुनियादी अवधारणा है। ऑब्जेक्ट फैक्ट्री को सीधे कॉल से बचने के लिए आप कन्स्ट्रक्टर के इंजेक्शन को स्वचालित कर सकते हैं।
आशा है कि इससे मदद मिलती है!
अच्छा उदाहरण के लिए धन्यवाद :)। मैं समझता हूं कि प्रश्न का अंतिम भाग थोड़ा व्यापक है, लेकिन मुझे लगता है कि आपने उस हिस्से का जवाब भी दिया है। – Morph
क्या मैं एक सुधार का सुझाव दे सकता हूं? क्या कोड नहीं होना चाहिए जहां भुगतानप्रोसेसर को उदाहरण मिल जाए? 'भुगतानप्रोसेसर प्रोसेसर = ऑब्जेक्ट फैक्ट्री। गेट इंस्टेंस();' –