حاويات DI باستخدام InversifyJS
سجّلوا الخدمات وحلّوها باستخدام حاوية
حاويات DI باستخدام InversifyJS درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
لماذا نستخدم حاوية DI؟
يصبح توصيل مخططات الكائنات الكبيرة يدويًا أمرًا مرهقًا وعرضةً للأخطاء. وتسجّل حاوية DI طريقة إنشاء كل تبعية، ثم تحلّها تلقائيًا. ويُعد 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 بجميع عمليات الربط الخاصة بتطبيقك. وتنشئ حاويةً واحدة عند بدء التشغيل، ثم تسجّل التبعيات فيها.
import { Container } from "inversify";
const container = new Container();ربط واجهة بـ Impl
تربط واجهة برمجة التطبيقات المتسلسلة 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();تبديل التطبيقات
لاستخدام أداة تسجيل مختلفة، أعد ربط الرمز بفئة أخرى. ولا يتأثر المستهلكون لأنهم يعتمدون على الرمز لا على الفئة الملموسة.
@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);نطاق Singleton
قد ينشئ كل استدعاء لـ get مثيلًا جديدًا افتراضيًا. استخدم inSingletonScope() لمشاركة مثيل واحد عبر التطبيق.
container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();الاختبار باستخدام الحاوية
يمكنك في الاختبارات إنشاء حاوية جديدة وربط كائنات زائفة بها، لتحصل على فوائد التوصيل نفسها مع عزل الوحدة قيد الاختبار.
const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);مفاضلات استخدام الحاويات
تقلل الحاويات الشيفرة المتكررة في المخططات الكبيرة، لكنها تضيف تبعيةً ومُزخرفات وطبقةً من عدم المباشرة. أما في التطبيقات الصغيرة، فغالبًا ما يكون الحقن اليدوي عبر المُنشئ أوضح.
تحقق سريع
تحقق سريع من هذا الدرس.
مراجعة
تستخدم InversifyJS كلاً من @injectable و@inject(token) وContainer. تقوم بربط bind<Interface>(token).to(Impl)، ثم تحل container.get الرسم البياني تلقائيًا. ويتطلب ذلك reflect-metadata والمزخرفات، مقابل تقليل الشيفرة التمهيدية باستخدام مستوى من التجريد.
الأسئلة الشائعة
هل درس «حاويات DI باستخدام InversifyJS» مجاني؟
نعم — نص درس «حاويات DI باستخدام InversifyJS» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «حاويات DI باستخدام InversifyJS»؟
سجّلوا الخدمات وحلّوها باستخدام حاوية تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «حاويات DI باستخدام InversifyJS»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات عكس التحكم
- الحقن عبر المُنشئ
- حاويات DI باستخدام InversifyJS
- رموز الخدمات الآمنة نوعيًا