繁体   English   中英

Nestjs - 手动实例化一个依赖于 useFactory 的 class

[英]Nestjs - Manually instantiate a class with dependencies on useFactory

假设我有两个这样的课程

@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]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM