使用useFactory方式依赖注入时,项目报错!

来源:4-4 使用工厂和值声明提供器

慕前端8962423

2017-10-25

当不重启项目时,将providers: [DefaultBookService, LoggerService]改成providers: [{
 provide: DefaultBookService, useFactory: (logger: LoggerService) => {
   let dev = Math.random() > 0.5;
   if (dev) {
     return new DefaultBookService(logger);
   } else {
     return new HuaZhangBookService(logger);
   }
 },deps: [LoggerService]
}, LoggerService],虽然页面可以出现内容,但是代码中已经报错了,

http://img.mukewang.com/szimg/59f0a4330001948909020189.jpg

http://img.mukewang.com/szimg/59f0a43300011cd507870739.jpg

http://img.mukewang.com/szimg/59f0a450000159d413790484.jpg

如果此时npm start重启项目,那么会报错:http://img.mukewang.com/szimg/59f0a4d00001871917450496.jpg

写回答

3回答

qqpozi

2017-11-23

我百度了下

useFactory 不支持箭头函数。就是Typescript在做静态分析时无法找到函数名。把箭头函数提出来

@NgModule({
 declarations: [
   AppComponent,
   StockComponent,
   Stock2Component
 ],
 imports: [
   BrowserModule,
   FormsModule,
   HttpModule
 ],
 providers: [
   {provide: 'IS_DEV_ENV', useValue: false},
   {
     provide: StockService, useFactory: bookServiceFactory, deps: [LoggerService, 'IS_DEV_ENV']
   },
   LoggerService
 ],
 bootstrap: [AppComponent]
})
export class AppModule {
}
export function  bookServiceFactory(logger: LoggerService, isDev) {
 if (isDev) {
   return new StockService(logger);
 } else {
   return new AnotherStockService(logger);
 }
}


0
1
慕前端8962423
对的,提出来就好了
2017-11-24
共1条回复

qqpozi

2017-11-23

这个问题你解决了吗?我也出现这个问题

0
0

JoJo

2017-10-31

报错是说这个组件没有在module里声明,看一下app.module.ts

0
0

Angular4.0从入门到实战 打造股票管理网站

Angular新特性,教你熟练使用 Angular 和 Typescript 开发组件式单页应用

2683 学习 · 1361 问题

查看课程