Angular2 DI: внедрение глобальной расширенной службы (не удается разрешить все параметры)

Я только что обновил кодовую базу своего приложения Ionic до версии ng2, используя AngularFire2. В базе кода у меня есть глобальный сервис под названием FirebaseService, который расширяет AngularFire.

@Injectable()
export class FirebaseService extends AngularFire {

  constructor(firebaseConfig: string, auth: AngularFireAuth, database: FirebaseDatabase) {
      super(firebaseConfig, auth, database);
  }

...

}

В моем app.component.ts Я включаю FirebaseService в providers массив (я пробовал оба FirebaseService а также { provide: AngularFire, useClass: FirebaseService }). Однако, когда я запускаю приложение, я получаю следующую ошибку:

Uncaught Error: Can't resolve all parameters for DiscoverPage: (NavController, GlobalService, ?, Events).

Конструктор для DiscoverPage как следует:

@Component({
  selector: 'catalogue-discover',
  templateUrl: 'catalogue-discover.html'
})

export class DiscoverPage {
  constructor(private nav: NavController, 
              private global: GlobalService,
              public firebase: FirebaseService, 
              private events: Events) {
  }

...

}

'?' указывает на FirebaseService - у меня такое ощущение, что я не выполнил DI должным образом. Любой совет, как поступить?

2 ответа

Есть две возможные проблемы:

  1. Как упоминается @shinglesmingles, вы должны добавить декоратор Injectable к вашему объявлению класса обслуживания

  2. Избегайте циклических ссылок, хотя они обычно работают, но есть случаи, когда они не работают

Пример [2]:

// file a.ts
export ClassA {}

// file b.ts
import { ClassA } from './';

export ClassB { 
  // using ClassA somehow
}

// file index.ts
export * from './a';
export * from './b';

Вы должны добавить @Injectable() декоратор к вашим услугам.

Другие вопросы по тегам