簡體   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