gpt4 book ai didi

javascript - 在 Aurelia 中注入(inject)多个使用 fetch HttpClient 的类

转载 作者:行者123 更新时间:2023-11-29 16:51:35 25 4
gpt4 key购买 nike

我有一个名为 Infrastructure 的类,我认为从 HttpClient 继承它会很方便。此类公开 get、post、put 和 delete 方法。

import {Aurelia} from "aurelia-framework";
import {HttpClient, json} from "aurelia-fetch-client";

export default class Infrastructure extends HttpClient {
get(url, queryString, contentType) {
//..
}

post(url, data, contentType) {
//..
}

put(url, data, contentType) {
//..
}

delete(url, contentType) {
//..
}
}

我的想法是,我现在可以拥有注入(inject) Infrastructure 的服务,它们可以在基础设施上调用 configure

import {inject} from "aurelia-framework";
import Infrastructure from "./infrastructure";

@inject(Infrastructure)
export class InventoryService {
constructor (infrastructure) {

infrastructure.configure(config => {
config
.useStandardConfiguration()
.withBaseUrl(`http://localhost:64441/inventory`);
});

this.infrastructure = infrastructure;
}
}

我有几个使用 Infrastructure 的服务,一切正常。问题是我不需要将两个这样的服务注入(inject)到同一个类中,并且配置的baseUrl 会相互干扰。

在 Aurelia 中默认情况下一切都是单例,我理解这一点,但是在 Aurelia 中处理这种情况的首选方法是什么?

我知道我总是可以跳过配置 baseUrl,但是能够配置它非常方便,我很好奇是否有更好的方法。

最佳答案

您可以使用不同的 key 注册同一“类”的多个实例。注册码可以是任何东西,不需要是类/构造函数。

下面是一个例子。第一步是更改您的 Infrastructure 类以在构造函数中接受 baseUrl 参数:

export class Infrastructure {
constructor(baseUrl) {
this.configure(config => {
config
.useStandardConfiguration()
.withBaseUrl(baseUrl);
});
}
...
}

接下来,您需要使用不同的 Infrastructure 实例配置容器。下面的代码通常会在启动时发生,可能在 main.js 中:

// configure the container
container.registerInstance("Inventory", new Infrastructure("http://foo.com"));
container.registerInstance("Orders", new Infrastructure("http://bar.com"));

现在您将能够按键解决这些实例:

// resolve by name
var inventory = container.get("Inventory");
var orders = container.get("Orders");

或者使用@inject将它们声明为依赖:

import {inject} from "aurelia-framework";

@inject("Inventory", "Orders")
export class InventoryService {
constructor (inventory, orders) {
this.inventory = inventory;
this.orders = orders;
}
}

本期中有很多关于与您类似的场景的讨论: https://github.com/aurelia/dependency-injection/issues/73

关于javascript - 在 Aurelia 中注入(inject)多个使用 fetch HttpClient 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35704120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com