代码之家  ›  专栏  ›  技术社区  ›  LppEdd

角环境循环依赖

  •  2
  • LppEdd  · 技术社区  · 7 年前

    如文档所述,我使用多个 environment 用于参数化应用程序启动的文件。

    environment.prod.ts :

    export const environment = {
        production: true,
        module: ProductionModule,
        baseUrl: ...
    }
    

    environment.ts :

    export const environment = {
        production: false,
        module: DevelopmentModule
    }
    

    里面 ProductionModule 我想从 环境 模块。

    @NgModule({
        declarations: [],
        imports: [
            LoggerModule.forRoot({ level: NgxLoggerLevel.ERROR })
        ],
        providers: [
            ...
            { provide: API_BASE_URL, useValue: environment.baseUrl }
        ]
    })
    export class ProductionModule {}
    

    然而,这产生了 Circular dependency 错误。
    解决这个问题的正确方法是什么?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Antoniossss    7 年前

    你不必使用 providers 也不需要模块 environment .

    只是简单的导入 environment.baseUrl 在代码中实际需要它的地方。

    import { environment } from '../../environments/environment';
    

    在代码中只是

    环境.baseurl

    这将使您免于循环依赖(我的意思是,在您的情况下,不是一般情况下),并且看到环境文件中的任何模块对我来说都是一种代码味道。

        2
  •  0
  •   shhdharmen    7 年前

    根据你的代码,这就是发生的事情( => 方法取决于):

    environment.ts/environment.prod.ts =>
    DevelopmentModule/ProductionModule =>
    environment.ts/environment.prod.ts (because, in providers array, you are using environments
    

    所以,正如您在上面看到的,它是如何生成循环依赖的。

    正确的方法取决于你,你想如何实现它。

    一种方法是,移除 module 进入 environments ,如果您不在任何地方使用它。

        3
  •  0
  •   Ved_Code_it    7 年前

    在该服务导入环境中使用apiprovider服务。创建与后端API相关的项目中需要的函数。并在您的项目中的任何地方使用这个apiprovider服务。

    推荐文章