2016-10-04 5 views
1

Sieht aus wie ein ziemlich häufiges Problem. Ich möchte Service1 in Service2 verwenden und ich bekomme die AusnahmeKann nicht alle Parameter für [...] lösen

Error: Can't resolve all parameters for ILIASRestProvider: (Http, ?).

obwohl in anderen Komponenten Service2 scheint injizierbare zu sein. Und ich glaube, ich habe alles zusammen:

  • @Injectable am Service1 und Service2
  • tsconfig.json emitDecoratorMetadata auf true gesetzt
  • Registrierte Service1 und Service2 im Providers Teil des ngModule

Wenn es überhaupt wichtig ist: Ich baue eine Ionic 2 RC0 Applikation. Hier sind die wichtigsten Dateien:

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.provider.ts

@Injectable() 
export class ILIASRestProvider { 

    public constructor(private http:Http, public app:ConnectionService) { 
    } 
    ... 
} 

ILIAS-app.service.ts

@Injectable() 
export class ConnectionService { 

    ... 

    constructor(public _config:AppConfig) { 
     this._database = SQLiteDatabaseService.instance(); 
    } 

    ... 
} 

app-config.ts

@Injectable() 
export class AppConfig { 

    protected data:any = {}; 

    constructor(public http:Http) { 
    } 

    ... 
} 

ionischer Setup

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 
+0

Der Import 'import {ConnectionService} von" ../ services/ilias-app.service "; ist korrekt? –

+0

Hi, ja das stimmt, ich habe versucht, die Klasse in einem Akt der Verzweiflung umzubenennen. – Oskar

+0

Habe nichts anderes gesehen, was verdächtig erschien. –

Antwort

2

Der erste, was ich vorschlagen würde, ist von Dateien direkt zu importieren, anstatt Fässern, denn das ist der ideale Weg ist.

Zweite Sache, wenn die obige Lösung nicht mit Ihrem Projekt möglich ist, als bitte die Importanweisungen neu anordnen. Sie sind nicht in der richtigen Reihenfolge. Beispiel: http wird in ILIASRestProvider verwendet, sollte vor ILIASRestProvider importiert werden.

hoffe, das hilft

1

Genau das gleiche Problem bei der Arbeit hier hatte. Das Problem war, dass wir eine zirkuläre Dateiabhängigkeit hatten.

  1. SignInComponent wurde in einem Unit-Test
  2. SignInComponent verwendet AuthService
  3. AuthService verwendet Routes.ts
  4. Routes.ts eine Route definiert getestet werden, die Sie SignInComponent als Komponente

hatte kann das erkennen, wenn das Injektionssystem Ihnen nicht den Namen geben kann, von dem es keine Instanz erstellen kann, und einfach den Namen als "?"

Verwandte Themen