2017-02-23 22 views
5

我一直在試圖將我的應用程序切換到AoT編譯,並且在應用程序加載時(在本地正常工作時)在生產環境中出現此錯誤。Angular2 - 錯誤:無法解析IconService的所有參數

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

好像錯誤是從正在提供IconService模塊到來。圖標服務構造看起來像

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

所以我的問題是,這是什麼錯誤意味着,它爲什麼會在PROD環境發生只(我已經試過在本地實現PROD模式)?

現在看來似乎意味着,不設置http和圖標的配置參數,但在應用程序模塊水平設置的圖標配置和HttpModule在其中設置的IconService進口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,私人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); 
} 

我想因爲某些原因沒有被提供的HTTP(即使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'; 

雖然下列作品之一:

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

我剛剛經歷過這個問題,我想知道你是否知道它爲什麼會發生? –

+0

@JacquesCornat我還沒有調查過它。至少我覺得依賴順序必須正確。但是,我懷疑裝飾者是如何處理的。 – LoganMzz

1

有時是解決它的單路 - 手動描述參數。這個錯誤的

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

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

一個可能的原因是,如果你不與@Injectable()裝飾你IconService類。如果這是原因,那麼在類聲明上添加裝飾將修復錯誤。

0

爲我工作,當我用,而在app.module.ts導入服務下列

{provide: AuthService, 
    depends: HttpClientModule} 
0

我的問題是,我是從基類繼承,和我飾基類與@Injectable 。繼承類是應具有@Injectable屬性的類,而不是基類。看起來,當編譯器看到@Injectable屬性時,它會檢查以確保構造函數中的所有屬性都可以被注入。如果沒有,這是一個錯誤。我通過從該類中刪除@Injectable屬性來解決此問題。

相關問題