2017-02-23 112 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属性来解决此问题。

相关问题