我目前正在尝试用typedi实现一个服务库,我需要根据请求注入数据库连接,因为我有一个单一的api后端到多个域和多个数据库,所以我在请求时选择数据库,基于vhost。
目前我正在使用routing-controllers,我所有的服务类都有一个.initPrisma
函数,我调用它来初始化,它工作正常,我目前正在做这样的事情:
@Service()
@JsonController()
export class ExampleController {
constructor(private myExampleService: ExampleController);
@Get("/example-endpoint")
async myExampleEndpoint(@Req() request: any){
const prisma = myPrismaFactory.getPrisma(req.request('host'));
return this.myExampleService.initPrisma(prisma).getExampleJsonFromDb();
}
}
@Service()
export default ExampleService {
constructor(private prisma: PrismaService){}
async getExampleJsonFromDb(){
return this.prisma.myExampleTable.findFirst();
}
}
@Service()
@JsonController()
export class ExampleController {
constructor(private myExampleService: ExampleController);
@Get("/example-endpoint")
async myExampleEndpoint(@Req() request: any){
const prisma = myPrismaFactory.getPrisma(req.request('host'));
Container.set(PrismaService, prisma); // will this be thread safe ?
return this.myExampleService.getExampleJsonFromDb(); // will this be thread safe ?
}
}
我的问题是,这会使用正确的prisma
示例吗?或者如果我有两个请求并行发送到具有不同域的同一个端点,因此有不同的prisma示例,那么就有可能混合查询?
或者,有没有更好的方法来注入这种依赖性?
先谢谢你了。
2条答案
按热度按时间7gcisfzg1#
我做了些测试,似乎无法刷新注入的变量.
然后进行单元测试以确认:
我将尝试使用限定作用域的容器来实现这一点。我想这会有内存损失,但可能是一个解决方案。
cnwbcb6i2#
解决后,限定作用域的容器工作。