angular - 将参数传递给 useFactory()
问题描述
练习 DI 和 Factory 方法,我想将一些参数传递给 Factory。所以我写了这样的东西:
const loggingImplementation: AnalyticsImplementation = {
recordEvent: (metric: Metric): void => {
console.log('The metric is:', metric);
console.log('Sending to', destUrl);
}
};
export function loggerFactory(http: HttpClient, destUrl: string): AnalyticsService {
return new AnalyticsService(loggingImplementation);
}
@NgModule({
imports: [CommonModule, HttpClientModule],
providers: [
{provide: 'API_URL', useValue: 'http://nsa.gov'},
{ provide: AnalyticsService, deps: [HttpClient, 'API_URL'], useFactory(http: HttpClient, destUrl: string): loggerFactory}
],
declarations: [ ]
})
export class AnalyticsDemoModule1 {
}
但是 Angular 给了我一个错误,说后面缺少分号,loggerFactory
所以我认为我没有使用正确的语法。你能帮我告诉我我做错了什么吗?
解决方案
不需要(http: HttpClient, destUrl: string)
:
useFactory: loggerFactory
如果你想注入 aAPI_URL
你可以使用一个特殊的符号:
{
provide: AnalyticsService,
deps: [ HttpClient, new Inject('API_URL') ],
useFactory: loggerFactory
}
它应该工作。您定义的任何内容deps
都将传递给工厂参数
推荐阅读
- firebase - 错误“包:cloud_firestore/src/query.dart”:断言失败:第 226 行 pos 12:“documentSnapshot != null”:不正确。扑火商店
- json - 使用本机消息通过 Delphi 从 Thunderbird 复制电子邮件时遇到编码问题
- javascript - 如何在 Wordpress 中根据标题和内容搜索产品?
- c++ - 来自协议缓冲区消息的普通结构
- javascript - 使用 yargs api 的动态和类型安全的函数参数
- string - 将相同的字符串加在一起(MATLAB)
- input - 如何在 Octave 中从键盘读取功能并稍后使用?
- amazon-cloudformation - 我可以使用 CloudFormation 中的映射来定义参数吗?
- python - Python 3 清理和规范化 URL 列表
- c++ - 如何针对自定义 CUDA 安装使用 OpenCL 构建 GDAL?