2016-10-04 12 views
1

かなり一般的な問題のようです。私は、サービス2にサービス1を使用したいと私は他のコンポーネントサービス2での注射のようだにもかかわらず、例外[...]のすべてのパラメータを解決できません。

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

を取得します。 emitDecoratorMetadataがngModule のプロバイダの一部で真

  • 登録サービス1とサービス2に設定tsconfig.jsonサービス1で

    • @Injectableやサービス2
    • :そして、私は一緒にすべてを持っていると思います

      全く問題がある場合:Ionic 2 RC0アプリケーションを構築しています。ここで重要なファイルは、以下のとおりです。

      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.module.ts app-config.ts

      @Injectable() 
      export class AppConfig { 
      
          protected data:any = {}; 
      
          constructor(public http:Http) { 
          } 
      
          ... 
      } 
      
      それは理想的な方法ですので、私はお勧めし

      イオンセットアップ

      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

    「../ services/ilias-app.service」;からの 'import {ConnectionService}のインポートは正しいですか? –

    +0

    こんにちは、それは正しいです、私は絶望の行為でクラスの名前を変更しようとしました。 – Oskar

    +0

    疑わしいと思われるものは見たことがありません。 –

    答えて

    2

    まず最初は、ファイルではなく、直接バレルからインポートすることです。

    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) { 
    } 
    ... 
    } 
    

    上記の解決策がプロジェクトでは不可能な場合は、インポートステートメントの順序を変更してください。彼らは正しい順序ではありません。たとえば、ILIASRestProviderでhttpが使用されていて、ILIASRestProviderの前にインポートする必要があります。

    希望します。

    1

    仕事中に同じ問題が発生しました。問題は、循環ファイルの依存性があることでした。

    1. SignInComponentは、ユニットテストでテストされた
    2. SignInComponentでのAuthServiceが
    3. Routes.tsあなたは、その成分

    としてSignInComponentを有していたルートを定義Routes.ts使用のAuthService

  • を使用注射システムがあなたのインスタンスを作ることができないものの名前を与えることができず、単に名前を "?"