2017-02-23 16 views
5

私のアプリをAoTコンパイルに切り替えようとしていて、アプリケーションがロードされているときにプロダクション環境でこのエラーが発生しています。Angular2 - エラー:IconServiceのすべてのパラメータを解決できません

Error: Can't resolve all parameters for IconService: (?, ?)

エラーがIconServiceを提供しているモジュール上から来ているように思えます。アイコンサービスのコンストラクタは

constructor(private http:Http, private iconConfiguror:IconConfiguror) {

のように見えるので、私の質問は、このエラーが何を意味していると、なぜそれが唯一の(私はローカルPRODモードを有効に試してみた)prod環境で起こるでしょうか?

それはhttpとアイコンの設定パラメータが用意されていませんが、アイコンの設定は、アプリモジュールレベルで提供されており、HttpModuleIconServiceが提供されIconModuleにインポートされることを意味ように思えます。

@NgModule({ 
    imports: [ 
     CommonModule, 
     HttpModule, 
    ], 
    declarations: [ 
     IconComponent, 
    ], 
    exports: [ 
     IconComponent, 
    ], 
    providers: [ 
     IconService, 
     __platform_browser_private__.BROWSER_SANITIZATION_PROVIDERS, 
    ], 
}) 

私たちのアイコンコンポーネントのバレル。

export * from "./components/icon/icon.configuror"; 

export * from "./components/icon/icon.service.provider"; 

export * from "./components/icon/icon.service"; 

export * from "./components/icon/icon.component"; 

export * from "./components/icon/icon.module"; 
+0

'コンストラクタ(プライベートhttp:Http、private iconConfiguror:IconConfiguror)' – Alex

+1

@ AJT_82はそれを更新するのを忘れました。 – tallkid24

+0

'__decorate'は正しいです、それらはそこに注入すべきではありません。あなたは 'IconConfiguror'サービスをどのように提供していますか? – altschuler

答えて

5

これは、IconServiceを別の方法で提供することで解決しました。

{ 
     provide: IconService, 
     useFactory: iconServiceFactory, 
     deps: [Http, IconConfiguror], 
    }, 

、工場自体

export function iconServiceFactory(http: Http, iconConfiguror: IconConfiguror) { 
    return new IconService(http, iconConfiguror); 
} 

私は(HttpModuleをインポートしていても)HTTPが提供されていませんでした何らかの理由で推測するので、私は、依存関係としてそれを宣言しなければなりませんでした。

2

私は同様の問題が発生しました。私はバレルの輸出秩序を変えることでそれを解決しました。

基本サービス・ファイル:

// dependency.service.ts 
@Injectable() 
export class DependencyService { } 

// dependant.service.ts 
import { DependencyService } from '.'; 

@Injectable() 
export class DependantService { 
    constructor(private dependency: DependencyService) { } 
} 

バレル次のエラーが発生します。

// index.ts 
export * from './dependant.service'; 
export * from './dependency.service'; 

1が動作する以下の中:

// index.ts 
export * from './dependency.service'; 
export * from './dependant.service'; 
+0

私はちょうどこの問題を経験しました。なぜそれが起こるのか知っているのでしょうか? –

+0

@JacquesCornat私はそれについて調査していない。少なくとも、依存関係の順序は正しいと論理的に判断します。しかし、私はデコレータがどのように処理されているのか疑問に思います。 – LoganMzz

1

は時々それを修正するための単一の方法です - 手動で記述パラメーター。あなたが@Injectable()とあなたのIconServiceクラスを飾るされていない場合は、このエラーの

static get parameters() { return [Http, IconConfiguror] } 

constructor(private http:Http, private iconConfiguror:IconConfiguror) { 
5

原因の1つです。それが原因であれば、その装飾をクラス宣言の上に追加するとエラーが修正されます。

0

{provide: AuthService, 
    depends: HttpClientModule} 
0

app.module.tsでサービスのインポート中に、私は次のように使用時に私の問題は、私は基本クラスから継承した、と私は@Injectableとその基本クラスを飾られていたことだった私のために働きました。継承するクラスは、基本クラスではなく@Injectable属性を持つクラスでした。コンパイラが@Ajectable attibuteを見ると、コンストラクタ内のすべてのプロパティをインジェクトでき​​るかどうかをチェックしているようです。そうでない場合は、エラーです。私はそのクラスから@注射可能なアトリビュートを取り除いて解決しました。

関連する問題