簡體   English   中英

lb4 調用不同存儲庫中的另一個存儲庫

[英]lb4 call another repository in different repository

在主存儲庫中調用不同存儲庫的最佳方法是什么? 我嘗試使用服務。 例如

...

@injectable({scope: BindingScope.TRANSIENT})
export class ProjectService {
  constructor(@repository(ProjectRepository) public projectRepository: ProjectRepository) { }
}

這是我的服務代碼。 當我在另一個存儲庫中定義此服務時,我可以訪問 projectRepository。 但我不確定這是最好的方法。

我們可以從關系[1]中獲取一個頁面並利用@repository.getter() [2]在主存儲庫中執行依賴注入:

import {Getter} from '@loopback/core';
import {DefaultCrudRepository, repository} from '@loopback/repository';

export class MainRepository() extends DefaultCrudRepository</*...*/>{
  constructor(
    @repository.getter(ProjectRepository)
    private _projectRepositoryGetter: Getter<ProjectRepository>;
  )

  async yourFunction(): Promise<void> {
    let projectRepository = await this._projectRepositoryGetter();

    // `projectRepository` now contains an instance of ProjectRepository.
  }
}

在上面的示例中,我們使用構造函數注入並在名為yourFunction的任意 function 中檢索ProjectRepository實例。 但是,您可以使用任何形式的依賴注入[3]並在同一閉包內的任何 function 中檢索實例。

為什么是吸氣劑?

防止循環依賴的吸氣劑。 這些在存儲庫中尤其普遍,因為它們可能具有相互連接的關系。 Getter 通過延遲綁定解析直到 LB4 應用程序明確請求來實現這一點。

何時使用服務?

服務可以被認為是比存儲庫更高級別的抽象。 它們不應該實現標准的 CRUD 或 KV 接口,也不假定它們鏈接到數據源。 如果您需要超出存儲庫范圍的邏輯,這很有用。 例如,一個服務可以實現一個 function,它添加一個新的數據庫記錄並將一個文件上傳到 Amazon S3。 這在與 Datastore 接口的代碼和不與 Datastore 接口的代碼之間保持了清晰的分離,從而確保 Datastore 邏輯保持可預測、可讀和易於測試。

鏈接

[1] https://loopback.io/doc/en/lb4/HasMany-relation.html#configuring-a-hasmany-relation存檔

[2] https://loopback.io/doc/en/lb4/apidocs.repository.repository.getter.html ( git 永久鏈接)

[3] https://loopback.io/doc/en/lb4/Dependency-injection.html#flavors-of-dependency-injectiongit 永久鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM