Dependency injection 如何在NestJS中将文本类型用作服务构造函数参数
我的服务上有一个文本类型作为构造函数参数:Dependency injection 如何在NestJS中将文本类型用作服务构造函数参数,dependency-injection,service,nestjs,Dependency Injection,Service,Nestjs,我的服务上有一个文本类型作为构造函数参数: export type MyType = 'val1' | 'val2'; @Injectable() export class MyService { myType: MyType; constructor(private appService: AppService, private myType: MyType = 'val2') { this.myType = myType; } } 我在构建时间上有一个错误 Nest
export type MyType = 'val1' | 'val2';
@Injectable()
export class MyService {
myType: MyType;
constructor(private appService: AppService, private myType: MyType = 'val2') {
this.myType = myType;
}
}
我在构建时间上有一个错误
Nest can't resolve dependencies of the MyService (AppService, ?). Please make sure that the argument String at index [1] is available in the AppModule context.
Potential solutions:
- If String is a provider, is it part of the current AppModule?
- If String is exported from a separate @Module, is that module imported within AppModule?
@Module({
imports: [ /* the Module containing String */ ]
})
你将如何解决这个问题
这是我的AppModule:
@Module({
imports: [HttpModule],
controllers: [AppController],
providers: [AppService, MyService, HttpClient],
})
export class AppModule {}
使用NestJS,您需要通过提供程序提供构造函数参数。Nest通常使用类来知道使用什么注入令牌,因为类同时存在于Typescript和JavaScript中。但是,您可以将@InjectDecorator与您自己的注入令牌和自定义值一起使用,以确保Nest正确地注入值。这将看起来像这样: @模块{ 供应商:[ 我的服务, { 提供:“MyToken”,//这可以是符号或字符串 useValue:'val2', } 应用服务, ], } 导出类AppModule{} 导出类型MyType='val1'|'val2'; @注射的 导出类MyService{ 建造师 专用appService:appService, //此令牌必须与自定义提供程序的“提供”属性中的令牌完全匹配 @注入'MyToken'私有myType:myType {} } 如果要添加其他依赖项,只需确保它们对模块可用
另一个选项是将myType标记为@Optional,这将允许Nest在无法解决注入时绕过注入,然后您可以像以前一样轻松地使用默认值您是否为模块文件中的MyType提供了Nest要注入的内容?@JayMcDoniel刚刚用my AppModules更新了这个问题,您可以看到我的默认值private MyType:MyType='val2',可以在运行时被调用方覆盖。那么,您如何能够在运行时使用令牌覆盖该值呢?您计划如何在运行时调用MyService?您是打算让Nest处理它,还是打算自己创建实例?正如您所看到的,我在AppModule中提供MyService,所以我没有实例化manuallySo,您打算如何更改MyType的值?它会根据什么变化?使用useFactory而不是useValue是可能的,在这里你提供了一个函数来确定要提供的值,但我不能给出一个例子,如果不知道你打算如何决定应该提供什么值。是的,这是一个好问题,我想我可能会坚持使用“提供->价值”,但我想知道你会如何处理工厂,使用“提供->价值”和“工厂”有什么区别?