【问题标题】:nestjs instantiate not injectable classnestjs实例化不可注入的类
【发布时间】:2020-08-30 21:32:06
【问题描述】:

我是nestJS 中的新手,所以如果我的问题在文档中得到解决,您可以直接向我提出问题,但我不知道如何创建不可注入类的实例。 这是代码的简化版本

export default class BoardingPass {

    constructor(
        orderId: string,
        companyIATa: string,
        token: string,
        private readonly checkinOrder = new CheckinOrder(orderId, companyIATa, token) // <-- i need to instantiate CheckinOrder
    ) {}
}

所以我需要实例化 CheckinOrder 类,但它需要 ApolloClient,它只能通过 nestJS DI 机制提供

export default class CheckinOrder implements ICheckinOrder {
    private order: CheckinOrderObject;

    constructor(
        private readonly id: string,
        private readonly carrierIATACode: string,
        private readonly accessToken: string,

        private readonly apolloClient: ApolloClient<NormalizedCacheObject> // can't figure out how to pass it via DI 
    ) {}
}

更新

阅读自定义提供程序,这似乎是我需要的,但正如您所见,有一些动态参数传递给 CheckinOrder 的 init 方法

const checkinOrderProvider: Provider<CheckinOrder> = {
    useFactory: apolloClient => new CheckinOrder('1', '2', '3', apolloClient),
    provide: CheckinOrder,
    inject: [ApolloClient]
};

@Module({
    imports: [ConfigModule.forRoot(), ApolloClientModule],
    providers: [checkinOrderProvider],
    exports: [checkinOrderProvider]
})
export class GooglePayModule {}

而且只有 Apollo 客户端是静态的,所以当登机牌类有 CheckinOrder 类的实例作为属性时,如何实现常规接口组合仍然不清楚:(

【问题讨论】:

  • CheckinOrder的动态值是如何确定的?

标签: nestjs


【解决方案1】:

您可以提供工厂方法并在某处使用它来及时创建您的服务。正如我们在这里所做的那样: https://github.com/valueadd-poland/pimp-my-pr/blob/master/libs/server/repository/infrastructure/src/lib/repositories/repository-repository.adapter.ts#L18

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2011-09-09
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多