使用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],虽然页面可以出现内容,但是代码中已经报错了,
如果此时npm start重启项目,那么会报错:
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);
}
}012017-11-24 -
qqpozi
2017-11-23
这个问题你解决了吗?我也出现这个问题
00 -
JoJo
2017-10-31
报错是说这个组件没有在module里声明,看一下app.module.ts
00
相似问题