Nestjs - 手动实例化 class 依赖于 useFactory
Nestjs - Manually instantiate a class with dependencies on useFactory
假设我有两个这样的class
@Injectable({ scope: Scope.DEFAULT })
class Service {
constructor() {}
// ...
}
@Injectable()
class OtherService {
param: T;
constructor(readonly service: Service, param: T) {}
// ...
}
我正在尝试使用工厂动态实例化最后一个 class
const otherServiceFactory = {
provide: "TOKEN",
scope: Scope.Request,
useFactory: (req: Request) => {
const param = req.headers["foo"];
return new OtherService(/* ts expects an instance of Service here */ , param)
},
inject: [REQUEST]
}
正如评论所说,在创建实例时,ts 正确地期望 Service
的实例。问题是我不想弄乱 DI 树,所以我不想实例化 Service
。我能够通过稍后设置参数而不是在构造函数中询问来解决这个问题,所以我不再需要工厂了,但感觉非常次优。有什么建议吗?
谢谢
您可以将Service
添加到inject
数组,并获取Nest创建的Service
的实例,然后将其传递给OtherService
,这样您就拥有了一切需要创建 class.
const otherServiceFactory = {
provide: "TOKEN",
scope: Scope.Request,
useFactory: (req: Request, service: Service) => {
const param = req.headers["foo"];
return new OtherServiceservice, param)
},
inject: [REQUEST, Service]
}
假设我有两个这样的class
@Injectable({ scope: Scope.DEFAULT })
class Service {
constructor() {}
// ...
}
@Injectable()
class OtherService {
param: T;
constructor(readonly service: Service, param: T) {}
// ...
}
我正在尝试使用工厂动态实例化最后一个 class
const otherServiceFactory = {
provide: "TOKEN",
scope: Scope.Request,
useFactory: (req: Request) => {
const param = req.headers["foo"];
return new OtherService(/* ts expects an instance of Service here */ , param)
},
inject: [REQUEST]
}
正如评论所说,在创建实例时,ts 正确地期望 Service
的实例。问题是我不想弄乱 DI 树,所以我不想实例化 Service
。我能够通过稍后设置参数而不是在构造函数中询问来解决这个问题,所以我不再需要工厂了,但感觉非常次优。有什么建议吗?
谢谢
您可以将Service
添加到inject
数组,并获取Nest创建的Service
的实例,然后将其传递给OtherService
,这样您就拥有了一切需要创建 class.
const otherServiceFactory = {
provide: "TOKEN",
scope: Scope.Request,
useFactory: (req: Request, service: Service) => {
const param = req.headers["foo"];
return new OtherServiceservice, param)
},
inject: [REQUEST, Service]
}