Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 在同一屏幕上注入不同的服务_Dependency Injection_Aurelia - Fatal编程技术网

Dependency injection 在同一屏幕上注入不同的服务

Dependency injection 在同一屏幕上注入不同的服务,dependency-injection,aurelia,Dependency Injection,Aurelia,我有两个屏幕: 屏幕1(Empleado-Empleado-form.js,Empleado-form.js是从Empleado.js调用的),其中注入了Service1 屏幕2(departmento departmento.js),其中注入了服务2 这是对我错误的一次重演: 当导航到屏幕1时,服务1被注入 当导航到Screen2时,将注入Service2 当导航回屏幕1时,服务2被注入 我假设预期的行为是每个服务都被注入带有@inspect的屏幕,而不是随机注入到下一个屏幕 这是github

我有两个屏幕:

  • 屏幕1(Empleado-Empleado-form.js,Empleado-form.js是从Empleado.js调用的),其中注入了Service1
  • 屏幕2(departmento departmento.js),其中注入了服务2
  • 这是对我错误的一次重演:

  • 当导航到屏幕1时,服务1被注入
  • 当导航到Screen2时,将注入Service2
  • 当导航回屏幕1时,服务2被注入 我假设预期的行为是每个服务都被注入带有@inspect的屏幕,而不是随机注入到下一个屏幕

    这是github的项目:

    • 屏幕1位于:src/部门(服务在内部)
    • 屏幕2位于:src/empleado(服务在内部,empleado-form.js是empleado-service.js的注入位置。)
    我使用以下模式:

    @inject(Screen1Service)
    export class Screen1{
        constructor(service){
            this.service = service
        }
    
        ...service use to fetch/post data
    }
    

    如果需要修改,让我知道我可以用承诺做一个要点。然而,我不知道是否可以在gist上导航

    服务注入确实是正确的。问题在于这些服务使用HttpClient的方式

    每个服务类在其构造函数中配置
    HttpClient
    。由于将一个
    HttpClient
    in注入到所有服务中,后者创建的服务将覆盖以前的配置。此外,每个服务本身就是一个单例,因此其构造函数和
    HttpClient
    配置只运行一次

    因此,导航顺序很重要。当从Screen1->Screen2->导航回Screen1时,Service2中的最后一个配置生效。如果您将序列更改为Screen2->Screen1->Screen2,您将看到相反的结果


    要解决此问题,您应该仅在一个位置配置
    HttpClient
    ,例如在
    main
    app
    中。参见此

    服务注入确实是正确的。问题在于这些服务使用HttpClient的方式

    每个服务类在其构造函数中配置
    HttpClient
    。由于将一个
    HttpClient
    in注入到所有服务中,后者创建的服务将覆盖以前的配置。此外,每个服务本身就是一个单例,因此其构造函数和
    HttpClient
    配置只运行一次

    因此,导航顺序很重要。当从Screen1->Screen2->导航回Screen1时,Service2中的最后一个配置生效。如果您将序列更改为Screen2->Screen1->Screen2,您将看到相反的结果


    要解决此问题,您应该仅在一个位置配置
    HttpClient
    ,例如在
    main
    app
    中。看到这个

    你怎么知道“当导航回屏幕1时,服务2被注入”?这就是我推断的原因。在两个屏幕上都有一个自定义表组件,当您导航回屏幕1时。在自定义表组件中可以看到从Service2中获取的数据。我相信注入没有错。问题在于您配置HttpClient的方式。要确认这一点,您能否在screen1的
    activate()
    console.log(this.service)
    ?该服务已正确注入。导航上的更改是url。返回时,服务1上使用了Service2的url。为什么会这样?你怎么知道“当导航回屏幕1时,服务2被注入”?这就是我推断的原因。在两个屏幕上都有一个自定义表组件,当您导航回屏幕1时。在自定义表组件中可以看到从Service2中获取的数据。我相信注入没有错。问题在于您配置HttpClient的方式。要确认这一点,您能否在screen1的
    activate()
    console.log(this.service)
    ?该服务已正确注入。导航上的更改是url。返回时,服务1上使用了Service2的url。为什么会这样?您将如何配置每个特定url的api url,或者如何将其放入每个获取中?我将配置api基本url(好的,配置方法名称为
    withBaseUrl
    ),并在每个获取中使用相对url。例如,在您的情况下,基本URL可以是
    http://hrm.dev/api
    或使用aurelia api。它让您可以很好地定义端点:您将如何为每个特定url配置api url,或者如何将其放入每个提取中?我将配置api基本url(出于某种目的,配置方法名称为
    withBaseUrl
    ),并在每个提取中使用相对url。例如,在您的情况下,基本URL可以是
    http://hrm.dev/api
    或使用aurelia api。它可以让您以一种很好的方式定义端点: