Inversify TypeScript: पूर्ण गाइड उदाहरण और IoC कंटेनर

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

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

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

Inversify क्या है और इसकी आवश्यकता क्यों है?

Inversify TypeScript और JavaScript के लिए एक शक्तिशाली और हल्का IoC (Inversion of Control) कंटेनर है। यह Dependency Injection (DI) पैटर्न को लागू करता है, जो SOLID सिद्धांतों में से एक प्रमुख सिद्धांत है। Inversify क्लासेस के बीच डिपेंडेंसी को प्रबंधित करता है, जिससे कोड अधिक मॉड्यूलर, टेस्ट करने योग्य और मेंटेन करने योग्य बनता है।

इसकी आवश्यकता क्यों है? पारंपरिक प्रोग्रामिंग में, क्लासेस स्वयं अपनी डिपेंडेंसी बनाती हैं (जैसे new के माध्यम से)। इससे कोड में मजबूत कपलिंग होती है। Inversify इस प्रक्रिया को उलट देता है: डिपेंडेंसी बाहर से "इंजेक्ट" की जाती हैं (इसलिए नाम Inversion of Control)। कंटेनर ऑब्जेक्ट बनाने और उनके लाइफसाइकिल को प्रबंधित करने का कार्य संभालता है।

Inversify का उपयोग करने के मुख्य लाभ:

  • कम कपलिंग: क्लासेस एब्स्ट्रैक्शन (इंटरफेस) पर निर्भर करती हैं, न कि विशिष्ट इम्प्लीमेंटेशन पर।
  • आसान टेस्टिंग: आप टेस्ट में वास्तविक डिपेंडेंसी को आसानी से मॉक/स्टब से बदल सकते हैं।
  • लाइफसाइकिल प्रबंधन: कंटेनर ऑब्जेक्ट को सिंगलटन या हर बार नया इंस्टेंस बना सकता है।
  • पठनीयता और रखरखाव: सभी डिपेंडेंसी स्पष्ट रूप से घोषित होती हैं और आसानी से ट्रैक की जा सकती हैं।
  • स्केलेबिलिटी: कई मॉड्यूल वाले बड़े प्रोजेक्ट्स के लिए बहुत उपयुक्त।

Inversify की स्थापना (इंस्टॉलेशन)

Inversify npm के माध्यम से स्थापित किया जाता है। TypeScript के साथ काम करने के लिए reflect-metadata (डेकोरेटर के लिए लाइब्रेरी) भी स्थापित करना होगा और tsconfig.json को कॉन्फ़िगर करना होगा।

# Inversify और reflect-metadata स्थापित करें
npm install inversify reflect-metadata --save

# TypeScript के लिए टाइप्स स्थापित करें (यदि स्थापित नहीं हैं)
npm install @types/node --save-dev

tsconfig.json सेटअप:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "outDir": "./dist",
    "rootDir": "./src",
    "types": ["reflect-metadata"]
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

महत्वपूर्ण: @injectable() और @inject() डेकोरेटर केवल तभी काम करते हैं जब experimentalDecorators और emitDecoratorMetadata सक्षम हों।

कोड उदाहरण के साथ त्वरित शुरुआत

एक सरल उदाहरण बनाते हैं: नोटिफिकेशन भेजने के लिए एक सर्विस। हमारे पास INotificationService इंटरफेस, इसका इम्प्लीमेंटेशन EmailNotificationService, और UserService क्लास होगी जो इस सर्विस का उपयोग करती है।

// 1. आवश्यक मॉड्यूल इम्पोर्ट करें
import "reflect-metadata";
import { Container, injectable, inject } from "inversify";

// 2. इंटरफेस (एब्स्ट्रैक्शन) परिभाषित करें
interface INotificationService {
  send(message: string): void;
}

// 3. इंटरफेस का इम्प्लीमेंटेशन
@injectable()
class EmailNotificationService implements INotificationService {
  send(message: string): void {
    console.log(`ईमेल भेजा जा रहा है: ${message}`);
  }
}

// 4. क्लास जो INotificationService पर निर्भर है
@injectable()
class UserService {
  private notificationService: INotificationService;

  constructor(
    @inject("INotificationService") notificationService: INotificationService
  ) {
    this.notificationService = notificationService;
  }

  notifyUser(userId: string): void {
    this.notificationService.send(`उपयोगकर्ता ${userId} के लिए सूचना`);
  }
}

// 5. कंटेनर बनाएं और डिपेंडेंसी रजिस्टर करें
const container = new Container();
container.bind("INotificationService").to(EmailNotificationService);
container.bind(                    

अनुशंसाएँ