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 ответа
Есть две возможные проблемы:
Как упоминается @shinglesmingles, вы должны добавить декоратор
Injectable
к вашему объявлению класса обслуживанияИзбегайте циклических ссылок, хотя они обычно работают, но есть случаи, когда они не работают
Пример [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';