我一直在尝试将我的应用程序切换到AoT编译,并在应用程序加载时在 生产环境 环境中收到此错误(它在本地工作正常) .
Error: Can't resolve all parameters for IconService: (?, ?)
似乎错误来自提供IconService的模块 . 图标服务构造函数看起来像
constructor(private http:Http, private iconConfiguror:IconConfiguror) {
所以我的问题是这个错误是什么意思,为什么它只会在prod环境中发生(我尝试在本地启用prod模式)?
看起来这意味着没有提供http和图标配置参数,但是图标配置在app模块级别提供, HttpModule
导入 IconModule
,其中提供了 IconService
.
@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";
6 回答
通过以不同方式提供IconService来解决此问题 .
和工厂本身
我想由于某些原因没有提供Http(即使导入了HttpModule),所以我不得不将它声明为依赖项 .
导致此错误的一个可能原因是,如果您没有使用
@Injectable()
装饰IconService
类 . 如果这是原因,在类声明之上添加该装饰将修复错误 .我遇到过类似的问题 . 我通过更改桶中的出口订单来解决它 .
基本服务文件:
以下桶导致错误:
跟随一个作品:
有时是修复它的单一方法 - 手动描述参数 .
当我在app.module.ts中导入服务时使用以下内容时,为我工作
我的问题是我从一个基类继承,我用@Injectable装饰了这个基类 . 继承类是应该具有@Injectable属性的类,而不是基类 . 似乎当编译器看到@Injectable attibute时,它会检查以确保可以注入构造函数中的所有属性 . 如果没有,那就是错误 . 我通过从该类中删除@Injectable attibute来解决它 .