TypeScript के लिए Dependency Injection कंटेनर: एक संपूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript के लिए Dependency Injection कंटेनर क्या है?



Dependency Injection (DI) एक डिज़ाइन पैटर्न है जिसमें कोई ऑब्जेक्ट अपनी निर्भरताएँ बाहर से प्राप्त करता है, न कि उन्हें स्वयं बनाता है। DI-कंटेनर एक उपकरण है जो इन निर्भरताओं के निर्माण और इंजेक्शन को स्वचालित रूप से प्रबंधित करता है। TypeScript में, स्थैतिक टाइपिंग के कारण, DI-कंटेनर विशेष रूप से प्रभावी होते हैं: वे टाइप-सुरक्षा सुनिश्चित करते हैं और परीक्षण को सरल बनाते हैं।



कंटेनर का मुख्य कार्य इंटरफेस को उनके विशिष्ट कार्यान्वयन से जोड़ना और निर्भरता श्रृंखलाओं को हल करना है। यह ढीले-युग्मित, मॉड्यूलर कोड लिखने की अनुमति देता है जिसे बनाए रखना और विस्तारित करना आसान है।



TypeScript में DI-कंटेनर की आवश्यकता क्यों है?



  • कोड युग्मन को कम करना — क्लास विशिष्ट कार्यान्वयन पर निर्भर नहीं होते, बल्कि केवल अमूर्तता (इंटरफेस) पर निर्भर होते हैं।
  • परीक्षण को सरल बनाना — निर्भरताओं को आसानी से मॉक या स्टब से बदला जा सकता है।
  • जीवनचक्र प्रबंधन — कंटेनर सिंगलटन, ट्रांज़िएंट ऑब्जेक्ट या निर्दिष्ट दायरे वाले ऑब्जेक्ट बना सकता है।
  • स्वचालित निर्भरता समाधान — कंटेनर स्वयं निर्भरता ट्री बनाता है, डेवलपर को मैन्युअल ऑब्जेक्ट निर्माण से मुक्त करता है।


TypeScript के लिए लोकप्रिय DI-कंटेनर



दो सबसे सामान्य लाइब्रेरी देखें: InversifyJS और TSyringe। दोनों TypeScript का समर्थन करते हैं, लेकिन अलग-अलग दृष्टिकोण रखते हैं।



1. InversifyJS



InversifyJS डेकोरेटर के साथ एक शक्तिशाली IoC-कंटेनर है। इसे डेकोरेटर @injectable() और @inject() के माध्यम से निर्भरताओं के स्पष्ट निर्दिष्टीकरण की आवश्यकता होती है। यह स्पष्ट आर्किटेक्चर वाले बड़े प्रोजेक्ट्स के लिए उपयुक्त है।



स्थापना

npm install inversify reflect-metadata --save


tsconfig.json फ़ाइल में निम्नलिखित शामिल करना सुनिश्चित करें:

{  "compilerOptions": {    "experimentalDecorators": true,    "emitDecoratorMetadata": true  }}


उपयोग का उदाहरण

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

// बाइंडिंग के लिए इंटरफ़ेस और सिंबल परिभाषित करेंinterface ILogger { log(message: string): void;}const TYPES = { ILogger: Symbol.for("ILogger"), IUserService: Symbol.for("IUserService"),};

// लॉगर का कार्यान्वयन@injectable()class ConsoleLogger implements ILogger { log(message: string): void { console.log(`[LOG]: ${message}`); }}

// लॉगर पर निर्भर सेवा@injectable()class UserService { constructor(@inject(TYPES.ILogger) private logger: ILogger) {}

createUser(name: string): void { this.logger.log(`उपयोगकर्ता ${name} बनाया गया`); }}

// कंटेनर कॉन्फ़िगरेशनconst container = new Container();container.bind<ILogger>(TYPES.ILogger).to(ConsoleLogger).inSingletonScope();container.bind<UserService>(TYPES.IUserService).to(UserService);

// उपयोगconst userService = container.get<UserService>(TYPES.IUserService);userService.createUser("अलेक्से");


2. TSyringe



TSyringe Microsoft का एक हल्का DI-कंटेनर है। यह डेकोरेटर और कंस्ट्रक्टर के माध्यम से स्वचालित समाधान का उपयोग करता है। यह मध्यम और छोटे प्रोजेक्ट्स के लिए आदर्श है।



स्थापना

npm install tsyringe reflect-metadata --save


tsconfig.json कॉन्फ़िगरेशन InversifyJS के समान है।



उपयोग का उदाहरण

import { container, injectable, singleton } from "tsyringe";import "reflect-metadata";

// क्लास को सिंगलटन के रूप में रजिस्टर करें@singleton()class DatabaseConnection { connect(): void { console.log("डेटाबेस से कनेक्शन स्थापित हुआ"); }}

// स्वचालित निर्भरता इंजेक्शन वाला क्लास@injectable()class UserRepository { constructor(private db: DatabaseConnection) {}

save(user

अनुशंसाएँ