मैं सी # दुनिया से आ रहा हूं, इसलिए मेरे विचार थोड़ा कम हो सकते हैं। मैं पाइथन में डीआई करना चाहता हूं, हालांकि मैं पुस्तकालयों के साथ एक प्रवृत्ति को देख रहा हूं जहां वे सभी एक सेवा लोकेटर पर भरोसा करते हैं। यही है, MyClass
का उदाहरण प्राप्त करने के लिए, आपको injectlib.build(MyClass)
जैसे ढांचे पर अपनी ऑब्जेक्ट सृजन को बांधना होगा।क्या पाइथन एक सेवा लोकेटर पर भरोसा किए बिना निर्बाध रूप से कर सकता है?
from injector import Injector, inject
class Inner(object):
def __init__(self):
self.foo = 'foo'
class Outer(object):
@inject(inner=Inner)
def __init__(self, inner=None):
if inner is None:
print('inner not provided')
self.inner = Inner()
else:
print('inner provided')
self.inner = inner
injector = Injector()
outer = Outer()
print(outer.inner.foo)
outer = injector.get(Outer)
print(outer.inner.foo)
वहाँ पायथन में एक तरह से स्वचालित रूप से, जबकि पैरामीटर नाम के आधार पर निर्भरता प्रकार का निष्कर्ष निकालते एक वर्ग बनाने के लिए है -
यहाँ मैं क्या मतलब का एक उदाहरण है? इसलिए यदि मेरे पास my_class
नामक एक कन्स्ट्रक्टर पैरामीटर है, तो MyClass
का एक उदाहरण इंजेक्शन दिया जाएगा। कारण मैं पूछता हूं कि मैं नहीं देखता कि मैं किसी वर्ग में निर्भरता कैसे इंजेक्ट कर सकता हूं जो किसी तृतीय पक्ष लाइब्रेरी के माध्यम से स्वचालित रूप से बनाई जाती है।
शानदार उत्तर! मैं पिछले कुछ महीनों से पाइथन को लगातार करने के बाद अब सहमत हूं कि जहां से मैं आया था (सी #) कि पाइथन को वास्तव में DI की आवश्यकता नहीं है। वास्तव में, मैं दोनों मिश्रण मिश्रण से नफरत है। –