TypeScript Academy · पाठ

InversifyJS के साथ DI कंटेनर

कंटेनर के साथ सेवाओं को पंजीकृत और हल करें।

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

InversifyJS के साथ DI कंटेनर, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

DI container क्यों

बड़े ऑब्जेक्ट ग्राफ़ को हाथ से जोड़ना उबाऊ और त्रुटि-प्रवण होता है। एक DI container हर निर्भरता को बनाने का तरीका पंजीकृत करता है और उन्हें अपने-आप हल करता है। InversifyJS एक लोकप्रिय TypeScript कंटेनर है।

इंस्टॉल करना और सक्षम करना

InversifyJS डेकोरेटर और रिफ्लेक्शन मेटाडेटा पर निर्भर करता है। आप inversify से आयात करते हैं और experimentalDecorators के साथ-साथ reflect-metadata को सक्षम करते हैं।

import "reflect-metadata";
import { Container, injectable, inject } from "inversify";

क्लासों को @injectable चिह्नित करना

@injectable() डेकोरेटर कंटेनर को बताता है कि किसी क्लास का निर्माण और उसमें इंजेक्शन किया जा सकता है। कंटेनर द्वारा बनाई जाने वाली हर क्लास के लिए यह आवश्यक है।

import { injectable } from "inversify";

@injectable()
class ConsoleLogger {
  log(m: string) { console.log(m); }
}

@inject से निर्भरताएँ घोषित करना

कंटेनर को यह बताने के लिए कंस्ट्रक्टर पैरामीटर पर @inject(token) का उपयोग करें कि कौन-सी बाइंडिंग उपलब्ध करानी है। टोकन निर्भरता की पहचान करता है।

@injectable()
class OrderService {
  constructor(@inject("Logger") private logger: ConsoleLogger) {}
  place() { this.logger.log("placed"); }
}

कंटेनर बनाना

एक Container आपके app की सभी बाइंडिंग रखता है। आप स्टार्टअप पर एक बनाकर उसमें निर्भरताएँ पंजीकृत करते हैं।

import { Container } from "inversify";
const container = new Container();

इंटरफ़ेस को कार्यान्वयन से बाँधना

फ्लुएंट एपीआई bind<T>(token).to(Impl) किसी टोकन, जो अक्सर इंटरफ़ेस होता है, को उस ठोस क्लास से जोड़ता है जिसे कंटेनर बनाएगा।

interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);

सेवाएँ हल करना

container.get<T>(token) अनुरोधित सेवा बनाता है और उसकी निर्भरताओं का निर्माण करके उनमें इंजेक्शन भी अपने-आप करता है।

container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();

कार्यान्वयन बदलना

किसी अलग logger का उपयोग करने के लिए टोकन को किसी दूसरी क्लास से फिर से बाँधें। उपभोक्ताओं में कोई बदलाव नहीं करना पड़ता, क्योंकि वे ठोस क्लास के बजाय टोकन पर निर्भर होते हैं।

@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);

सिंगलटन दायरा

डिफ़ॉल्ट रूप से हर get एक नया इंस्टेंस बना सकता है। पूरे app में एक ही इंस्टेंस साझा करने के लिए inSingletonScope() का उपयोग करें।

container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();

कंटेनर के साथ परीक्षण

परीक्षणों में आप एक नया container बना सकते हैं और नकली घटकों को बाँध सकते हैं। इससे जिस इकाई का परीक्षण हो रहा है, उसे अलग रखते हुए वही संयोजन लाभ मिलते हैं।

const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);

कंटेनर के लाभ और सीमाएँ

कंटेनर बड़े ग्राफ़ के लिए दोहराव वाला कोड कम करते हैं, लेकिन वे एक निर्भरता, डेकोरेटर और अप्रत्यक्षता जोड़ते हैं। छोटे app के लिए हाथ से किया गया कंस्ट्रक्टर इंजेक्शन अक्सर अधिक स्पष्ट होता है।

त्वरित जाँच

इस पाठ की त्वरित जाँच।

पुनरावलोकन

InversifyJS में @injectable, @inject(token) और एक Container का उपयोग किया जाता है। आप bind<Interface>(token).to(Impl) करते हैं और container.get निर्भरता-ग्राफ को अपने-आप हल करता है। इसके लिए reflect-metadata और डेकोरेटर आवश्यक हैं; इससे अतिरिक्त प्रारंभिक कोड के बदले अप्रत्यक्षता मिलती है।

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

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

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

पाठ्यक्रम
101
पाठ
352

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

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

हाँ—“InversifyJS के साथ DI कंटेनर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“InversifyJS के साथ DI कंटेनर” में मैं क्या सीखूँगा?

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

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

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

“InversifyJS के साथ DI कंटेनर” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. कंट्रोल उलटाव की मूल बातें
  2. कंस्ट्रक्टर इंजेक्शन
  3. InversifyJS के साथ DI कंटेनर
  4. प्रकार-सुरक्षित सेवा टोकन
← TypeScript Academy पर वापस जाएँ