angular - [...] için tüm parametreler çözümlenemiyor
Oldukça yaygın bir sorun gibi görünüyor. Service2'de Service1'i kullanmak istiyorum ve istisna alıyorum
Hata: ILIASRestProvider için tüm parametreler çözülemedi: (Http, ?).
diğer Bileşenlerde Service2 enjekte edilebilir gibi görünse de. Ve sanırım her şeyi bir araya getirdim:
- @Injectable Service1 ve Service2 üzerinde
- tsconfig.json emitDecoratorMetadata true olarak ayarlandı
- ngModule'ün Providers bölümünde Service1 ve Service2 kaydedildi
Eğer önemliyse: Bir Ionic 2 RC0 Uygulaması inşa ediyorum. İşte önemli dosyalar:
app.module.ts
import { NgModule } from '@angular/core';
import { IonicApp, IonicModule } from 'ionic-angular';
import { MyApp } from './app.component';
import {AppConfig} from "../config/app-config";
import {ConnectionService} from "../services/ilias-app.service";
import {ILIASRestProvider} from "../providers/ilias-rest.provider";
import {MigrationsService} from "../services/migrations.service";
import {FooterToolbarService} from "../services/footer-toolbar.service";
import {ObjectListPage} from "../pages/object-list/object-list";
import {FavoritesPage} from "../pages/favorites/favorites";
import {NewObjectsPage} from "../pages/new-objects/new-objects";
import {SettingsPage} from "../pages/settings/settings";
import {InfoPage} from "../pages/info/info";
import {LogoutPage} from "../pages/logout/logout";
import {SynchronizationService} from "../services/synchronization.service";
import {DataProvider} from "../providers/data-provider.provider";
import {FileService} from "../services/file.service";
import {DataProviderFileObjectHandler} from "../providers/handlers/file-object-handler";
import {TranslatePipe} from "ionic-angular/index";
import {FileSizePipe} from "../pipes/fileSize.pipe";
import {HttpModule, Http} from '@angular/http';
import {TranslateModule} from 'ng2-translate/ng2-translate';
import {TranslateLoader} from "ng2-translate/src/translate.service";
import {TranslateStaticLoader} from "ng2-translate/src/translate.service";
@NgModule({
declarations: [
MyApp,
ObjectListPage,
FavoritesPage,
NewObjectsPage,
SettingsPage,
InfoPage,
LogoutPage,
FileSizePipe,
TranslatePipe
],
imports: [
HttpModule,
IonicModule.forRoot(MyApp, {prodMode: window.hasOwnProperty('cordova')}),
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (http: Http) => new TranslateStaticLoader(http, '/assets/i18n', '.json'),
deps: [Http]
})
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
ObjectListPage,
FavoritesPage,
NewObjectsPage,
SettingsPage,
InfoPage,
LogoutPage
],
providers: [
AppConfig,
ConnectionService, //<-----------------------
MigrationsService,
ILIASRestProvider, //<-------------------------
FooterToolbarService,
DataProvider,
FileService,
SynchronizationService,
DataProviderFileObjectHandler
]
})
export class AppModule {}
ilias-rest.sağlayıcı.ts
@Injectable()
export class ILIASRestProvider {
public constructor(private http:Http, public app:ConnectionService) {
}
...
}
ilias-uygulama.servis.ts
@Injectable()
export class ConnectionService {
...
constructor(public _config:AppConfig) {
this._database = SQLiteDatabaseService.instance();
}
...
}
uygulama-konfigürasyonu.ts
@Injectable()
export class AppConfig {
protected data:any = {};
constructor(public http:Http) {
}
...
}
ionic kurulumu
Your system information:
Cordova CLI: 5.4.1
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.1.0-beta.1
OS: Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS
Node Version: v6.6.0
Cevap #1
Öncelikle önereceğim şey, ideal yol olduğu için varillerden ziyade dosyalardan doğrudan içe aktarmaktır.
import {HttpModule, Http} from '@angular/http';
import {ConnectionService} from "../services/ilias-app.service";
@Injectable()
export class ILIASRestProvider {
public constructor(private http:Http, public app:ConnectionService) {
}
...
}
İkinci olarak, eğer yukarıdaki çözüm projenizle mümkün değilse, lütfen import ifadelerinin sırasını değiştirin. Doğru sırada değiller. Örneğin http, ILIASRestProvider'da kullanılmaktadır ve ILIASRestProvider'dan önce import edilmelidir.
Umarım bu yardımcı olur
Cevap #2
İş yerinde burada aynı problemi yaşadım. Sorun, dosyalar arasında döngüsel bir bağımlılık olmamızdı.
- SignInComponent bir birim testinde test ediliyordu
- SignInComponent AuthService kullandı
- AuthService Routes.ts dosyasını kullandı
- Routes.ts, bileşeni olarak SignInComponent olan bir rota tanımladı
Enjeksiyon sisteminin bir örneğini oluşturamadığı şeyin adını veremediğinde ve basitçe adı '"?"' olarak verdiğinde bunun bir problem olduğunu anlayabilirsiniz.
