【问题标题】:lb4 call another repository in different repositorylb4 调用不同存储库中的另一个存储库
【发布时间】:2021-04-01 14:48:37
【问题描述】:

在主存储库中调用不同存储库的最佳方式是什么?我尝试使用服务。例如

...

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

这是我的服务代码。当我在另一个存储库中定义此服务时,我可以访问 projectRepository。但我不确定这是不是最好的方法。

【问题讨论】:

    标签: javascript typescript loopbackjs strongloop loopback4


    【解决方案1】:

    我们可以从关系[1]中获取一个页面并利用@repository.getter()[2]在主Repository中执行依赖注入:

    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 的任意函数中检索 ProjectRepository 实例。但是,您可以使用任何形式的依赖注入 [3] 并在同一闭包内的任何函数中检索实例。

    为什么是吸气剂?

    Getter 防止循环依赖。这些在存储库中尤其普遍,因为它们可能具有相互连接的关系。 Getter 通过延迟绑定解析来实现这一点,直到 LB4 应用程序明确请求。

    何时使用服务?

    服务可以被认为是比存储库更高级别的抽象。它们不应该实现标准的 CRUD 或 KV 接口,也不假定它们链接到数据源。如果您需要超出存储库范围的逻辑,这很有用。例如,服务可以实现添加新数据库记录并将文件上传到 Amazon S3 的功能。这将与 Datastore 接口的代码与不与 Datastore 接口的代码明确区分开来,从而确保 Datastore 逻辑保持可预测、可读和易于测试。

    链接

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

    [2]https://loopback.io/doc/en/lb4/apidocs.repository.repository.getter.html(git permalink)

    [3]https://loopback.io/doc/en/lb4/Dependency-injection.html#flavors-of-dependency-injection (git permalink)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2010-11-24
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      相关资源
      最近更新 更多