تايبسكريبت - أنجولار 2 - مزج حقن التبعية في المُنشئ مع وسائط أخرى


في الصف التالي أود أن أُجرد الاعتماد على http، بحيث يستخدم Angular 2 حقن الاعتمادية العادية لحقن كائن http.

import { Http } from '@angular/http';

class MyCollectionView<T> extends CollectionView {
  constructor(private endpoint: string, private http: Http) {
  }

  // ... implemenation of class ...
}

أود استخدام الفصل الدراسي على النحو التالي:

class MyClass {
  private collection: MyCollectionView<ITestRow>;

  constructor() {
    this.collection = new MyCollectionView<ITestRow>('/some/endpoint');
  }
}

للتجسيد في تنفيذي الحالي يجب أن أكتب

class MyClass {
  private collection: MyCollectionView<ITestRow>;

  constructor(private http: Http) {
    this.collection = new MyCollectionView<ITestRow>('/some/endpoint', http);
  }
}

على حد علمي، ليس من الممكن دمج حقن التبعيات في ng2 مع المعاملات المخصصة في الباني. أعتقد أنني بحاجة إلى نوع من دالة المصنع التي تتولى جزء حقن التبعيات، لكن حتى الآن لم أحقق أي نجاح. خصوصًا لأن الفئة تستخدم أيضًا النوعيات العامة. هل هناك أي ممارسات مثلى يمكنني اتباعها هنا؟

يرجى الملاحظة أنه في اختبارات الوحدة يجب أن يكون من الممكن ما زال حل DI باستخدام MockBackend بدلاً من ذلك.

لقد وجدت هذا السؤال على StackOverflow، لكن الإجابة الأكثر تصويتًا لا يمكن استخدامها برأيي لأن الوسائط يجب أن تكون ديناميكية.

الإجابة رقم 1

حقن التبعيات (DI) يعمل فقط مع الفئات التي تم إنشاؤها بواسطة DI. إذا قمت بإنشاء الفئات باستخدام new Xxx()، فلن يحدث أي حقن تبعيات.

إذا تم إنشاء النسخة بواسطة DI فلن تتمكن من تمرير معلماتك الخاصة.
ستحتاج إلى إنشاء موفري هذه المعلمات ليتمكن DI من حقنها.

ما تفعله هو الطريق الصحيح.