tsyringe TypeScript: पूर्ण गाइड उदाहरणों के साथ

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

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

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

tsyringe for TypeScript: पूर्ण गाइड उदाहरणों के साथ

आधुनिक TypeScript डेवलपमेंट में, डिपेंडेंसी मैनेजमेंट एक महत्वपूर्ण कार्य है, खासकर स्केलेबल और टेस्ट करने योग्य एप्लिकेशन बनाते समय। tsyringe लाइब्रेरी एक हल्का और शक्तिशाली डिपेंडेंसी इंजेक्शन (DI) कंटेनर है, जो पूरी तरह से TypeScript डेकोरेटर पर आधारित है। यह डेवलपर्स को कंपोनेंट्स के बीच डिपेंडेंसी को डिक्लेरेटिव रूप से परिभाषित करने, उन्हें स्वचालित रूप से हल करने और ऑब्जेक्ट्स के लाइफसाइकिल को मैनेज करने की अनुमति देता है।

tsyringe की आवश्यकता क्यों है? बड़े प्रोजेक्ट्स में, क्लासेस के इंस्टेंस मैन्युअली बनाना और उन्हें कंस्ट्रक्टर में पास करना कोड को टाइटली कपल्ड बना देता है, टेस्टिंग को जटिल बनाता है और इम्प्लीमेंटेशन बदलना मुश्किल कर देता है। tsyringe इन समस्याओं को एक सेंट्रलाइज्ड रजिस्ट्री (कंटेनर) प्रदान करके हल करता है, जो जानता है कि डिपेंडेंसी कैसे बनाई और प्रदान की जाए। आप बस यह बताते हैं कि कौन सी क्लासेस या टोकन रजिस्टर होने चाहिए, और कंटेनर स्वचालित रूप से उन्हें वहां इंजेक्ट करता है जहां उनकी आवश्यकता होती है। यह कोड को साफ, मॉड्यूलर बनाता है और यूनिट टेस्ट लिखना काफी आसान बना देता है।

यह लाइब्रेरी TypeScript डेकोरेटर (@injectable(), @inject()) का सक्रिय रूप से उपयोग करती है, जो Angular या NestJS से परिचित डेवलपर्स के लिए सिंटैक्स को सहज बनाती है। tsyringe को जटिल कॉन्फ़िगरेशन की आवश्यकता नहीं है, यह आधुनिक TypeScript वर्जन के साथ "आउट ऑफ द बॉक्स" काम करता है और विभिन्न रजिस्ट्रेशन स्ट्रेटेजी (singleton, transient, scoped) को सपोर्ट करता है। इस लेख में, हम इंस्टॉलेशन से लेकर जटिल उपयोग केस तक, tsyringe के सभी पहलुओं पर विस्तार से चर्चा करेंगे।

इंस्टॉलेशन

अपने TypeScript प्रोजेक्ट में tsyringe इंस्टॉल करने के लिए, npm का उपयोग करके निम्नलिखित कमांड चलाएं:

npm install tsyringe reflect-metadata

इंस्टॉलेशन के बाद, सुनिश्चित करें कि आपके प्रोजेक्ट में डेकोरेटर सपोर्ट कॉन्फ़िगर किया गया है। इसके लिए tsconfig.json फ़ाइल में निम्नलिखित विकल्प शामिल होने चाहिए:

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

साथ ही, अपने एप्लिकेशन के एंट्री पॉइंट (जैसे, index.ts) में एक बार reflect-metadata को इम्पोर्ट करना आवश्यक है, ताकि डेकोरेटर के लिए मेटाडेटा सक्षम हो सके:

import "reflect-metadata";
// ... बाकी कोड

त्वरित शुरुआत: न्यूनतम कार्यशील उदाहरण

आइए एक सरल एप्लिकेशन बनाते हैं जो tsyringe की बुनियादी कार्यप्रणाली को प्रदर्शित करता है। हमारे पास डेटाबेस के लिए एक सर्विस होगी, जिसे कंट्रोलर में इंजेक्ट किया जाएगा।

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

// 1. सर्विस को परिभाषित करें जिसे इंजेक्ट किया जाएगा
@injectable()
class DatabaseService {
  getData(): string {
    return "डेटाबेस से डेटा";
  }
}

// 2. कंट्रोलर को परिभाषित करें जो DatabaseService पर निर्भर है
@injectable()
class UserController {
  constructor(
    @inject(DatabaseService) private dbService: DatabaseService
  ) {}

  getUserData(): string {
    return this.dbService.getData();
  }
}

// 3. क्लासेस को कंटेनर में रजिस्टर करें (यहां यह आवश्यक नहीं है,
//    क्योंकि tsyringe स्वचालित रूप से रजिस्टर्ड क्लासेस को हल कर सकता है)
container.registerSingleton(DatabaseService);
container.registerSingleton(UserController);

// 4. कंटेनर का उपयोग करके कंट्रोलर का इंस्टेंस प्राप्त करें
const controller = container.resolve(UserController);
console.log(controller.getUserData()); // आउटपुट: "डेटाबेस से डेटा"

यह उदाहरण तीन मुख्य चरण दिखाता है: क्लास को @injectable() के रूप में चिह्नित करना, कंस्ट्रक्टर में @inject() के माध्यम से डिपेंडेंसी निर्दिष्ट करना, और container.resolve() के माध्यम से इंस्टेंस प्राप्त करना। ध्यान दें कि यदि क्लास को डेकोरेटर के साथ रजिस्टर किया गया है, तो

अनुशंसाएँ