[英]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-injection ( git 永久鏈接)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.