Swift Academy · पाठ

कंस्ट्रक्टर इंजेक्शन

इनिशियलाइज़र के ज़रिए निर्भरताएँ पास कीजिए।

पाठ 2, कुल 4 में से13 चरण

कंस्ट्रक्टर इंजेक्शन, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

कंस्ट्रक्टर इंजेक्शन

DI की सबसे सामान्य शैली में निर्भरताएँ इनिशियलाइज़र के माध्यम से पास की जाती हैं। ऑब्जेक्ट को निर्माण के समय अपनी सभी आवश्यक चीज़ें मिल जाती हैं और वह उन्हें सहेज लेता है।

एक मूलभूत इनिशियलाइज़र

एक संग्रहीत प्रॉपर्टी घोषित करें और उसे init में मान दें। ऑब्जेक्ट बनाने के लिए कॉल करने वालों को निर्भरता उपलब्ध करानी होगी।

struct Greeter { func hi() -> String { "Hi" } }
struct View {
    let greeter: Greeter
    init(greeter: Greeter) { self.greeter = greeter }
    func show() { print(greeter.hi()) }
}
View(greeter: Greeter()).show()

अपरिवर्तनीय निर्भरताएँ

इंजेक्ट की गई प्रॉपर्टी के लिए let का उपयोग करने से वे अपरिवर्तनीय बन जाती हैं, इसलिए निर्माण के बाद निर्भरता बदली नहीं जा सकती।

struct Engine { let hp: Int }
struct Car {
    let engine: Engine // cannot change later
    init(engine: Engine) { self.engine = engine }
}
let c = Car(engine: Engine(hp: 150))
print(c.engine.hp)

कई निर्भरताएँ

एक से अधिक सहयोगी ऑब्जेक्ट इंजेक्ट करने के लिए कई पैरामीटर सूचीबद्ध करें। इनिशियलाइज़र आवश्यकताओं का पूरा समूह स्पष्ट करता है।

struct DB { func get() -> Int { 7 } }
struct Cache { func put(_ v: Int) { print("cached \(v)") } }
struct Service {
    let db: DB
    let cache: Cache
    init(db: DB, cache: Cache) { self.db = db; self.cache = cache }
    func run() { cache.put(db.get()) }
}
Service(db: DB(), cache: Cache()).run()

डिफ़ॉल्ट पैरामीटर मान

डिफ़ॉल्ट मान से कॉल करने वाले प्रोडक्शन में निर्भरता देना छोड़ सकते हैं, जबकि परीक्षणों में उसे बदलने की सुविधा बनी रहती है।

struct Logger { func log(_ m: String) { print(m) } }
struct Service {
    let logger: Logger
    init(logger: Logger = Logger()) { self.logger = logger }
    func run() { logger.log("go") }
}
Service().run() // uses default

क्लास कंस्ट्रक्टर इंजेक्शन

क्लास भी इसी तरीके का पालन करती हैं। इंस्टेंस के उपयोग योग्य बनने से पहले इनिशियलाइज़र हर निर्भरता को मान दे देता है।

class Mailer { func send() { print("sent") } }
class Signup {
    let mailer: Mailer
    init(mailer: Mailer) { self.mailer = mailer }
    func go() { mailer.send() }
}
Signup(mailer: Mailer()).go()

मान इंजेक्ट करना

निर्भरताएँ केवल ऑब्जेक्ट ही नहीं होतीं। आप उसी तरीके से किसी आधार वेब-पते या फ़्लैग जैसे कॉन्फ़िगरेशन मान भी इंजेक्ट कर सकते हैं।

struct Client {
    let baseURL: String
    init(baseURL: String) { self.baseURL = baseURL }
    func endpoint(_ p: String) -> String { baseURL + p }
}
print(Client(baseURL: "https://api").endpoint("/users"))

संयोजन-मूल

App के प्रवेश बिंदु के पास एक जगह पूरे ऑब्जेक्ट ग्राफ़ को जोड़ती है। बाकी सभी भागों को केवल पहले से तैयार निर्भरताएँ मिलती हैं।

struct DB { func count() -> Int { 3 } }
struct Repo { let db: DB; func n() -> Int { db.count() } }
struct App { let repo: Repo; func run() { print(repo.n()) } }
// Composition root:
let app = App(repo: Repo(db: DB()))
app.run()

छिपे हुए ग्लोबल से बचना

कंस्ट्रक्टर इंजेक्शन छिपे हुए ग्लोबल एक्सेस का स्थान लेता है। हर निर्भरता स्पष्ट होती है, इसलिए आप पता लगा सकते हैं कि डेटा किस तरह प्रवाहित होता है।

struct Settings { let theme: String }
struct Screen {
    let settings: Settings
    func render() { print("Theme: \(settings.theme)") }
}
Screen(settings: Settings(theme: "dark")).render()

आवश्यक बनाम वैकल्पिक

यदि कोई निर्भरता वास्तव में वैकल्पिक है, तो उसे वैकल्पिक प्रकार के रूप में दर्शाएँ; अन्यथा उसे आवश्यक रखें, ताकि कोई ऑब्जेक्ट अधूरी कॉन्फ़िगरेशन के साथ अस्तित्व में न आ सके।

struct Analytics { func track() { print("tracked") } }
struct Flow {
    let analytics: Analytics?
    func step() { analytics?.track() }
}
Flow(analytics: Analytics()).step()
Flow(analytics: nil).step()

कंस्ट्रक्टर इंजेक्शन क्यों

यह पूरी तरह प्रारंभ किए गए ऑब्जेक्ट की गारंटी देता है, निर्भरताओं को स्पष्ट बनाता है और let की अपरिवर्तनीयता के साथ काम करता है। स्विफ्ट में इसे डिफ़ॉल्ट रूप से अपनाने की सलाह दी जाती है।

struct Adder { func add(_ a: Int, _ b: Int) -> Int { a + b } }
struct Calc {
    let adder: Adder
    init(adder: Adder) { self.adder = adder }
}
print(Calc(adder: Adder()).adder.add(4, 5))

त्वरित जाँच

कंस्ट्रक्टर इंजेक्शन को अक्सर प्राथमिकता क्यों दी जाती है?

पुनरावलोकन

Constructor injection निर्भरताओं को init के माध्यम से पास करके सहेजता है, आमतौर पर अपरिवर्तनीय let प्रॉपर्टी के रूप में। आप ऑब्जेक्ट या मान इंजेक्ट कर सकते हैं, डिफ़ॉल्ट दे सकते हैं और संयोजन-मूल में सब कुछ जोड़ सकते हैं। अब आप ठोस प्रकारों के बजाय प्रोटोकॉल इंजेक्ट करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Swift सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
122
पाठ
409

अक्सर पूछे जाने वाले प्रश्न

क्या “कंस्ट्रक्टर इंजेक्शन” पाठ निःशुल्क है?

हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “कंस्ट्रक्टर इंजेक्शन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कंस्ट्रक्टर इंजेक्शन” में मैं क्या सीखूँगा?

इनिशियलाइज़र के ज़रिए निर्भरताएँ पास कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“कंस्ट्रक्टर इंजेक्शन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Dependency Injection क्यों
  2. कंस्ट्रक्टर इंजेक्शन
  3. प्रोटोकॉल-आधारित अमूर्तीकरण
  4. परीक्षणों में निर्भरताओं का मॉक बनाना
← Swift Academy पर वापस जाएँ