gpt4 book ai didi

angular - 根据运行时标志提供 API 或模拟版本

转载 作者:太空狗 更新时间:2023-10-29 18:28:43 29 4
gpt4 key购买 nike

我想提供基于运行时标志的 API 接口(interface)的模拟或真实实现。这是我目前的做法:

providers:[{
provide: MyApi,
useFactory: () => {
return env.useSpoofData ? mockMyApi : MyApi
}
}]

我将 mockMyApi 定义为:

export const mockMyApi: MyApi = {
get(): Observable<MyResponse> {
const resp: MyResponse = {items};
return observableOf(resp);
},
};

此模拟版本有效,但以这种方式提供的真实版本无效。 (但是,如果我根本不覆盖此提供程序,则真实版本有效)

我已经尝试了两种方法来解析“真实”实现的符号。

一:

provide: MyApi,
deps: [MyApi],
useFactory: (real: MyApi) => env.spoof ? mockMyApi : real;

失败。构建时的循环依赖。

两个:

provide: MyApi,
deps: [Injector],
useFactory: (inj: Injector) => env.spoof ? mockMyApi : inj.get(MyApi);

失败。运行时堆栈溢出。

从 useFactory 返回类时,实例化或提供类的正确方法是什么?或者,是否有更简单的方法来覆盖提供程序?

最佳答案

你提供了一个工厂,所以你不能简单地将注入(inject) token 作为工厂结果传递。 mockMyApi 是一个常量,而 MyApi 是一个类。因此,您需要创建该类的一个对象。这就是工厂通常的用途。使用 deps 传递依赖关系,例如HttpClient:

providers:[{
provide: MyApi,
useFactory: (http: HttpClient) => {
return env.useSpoofData ? mockMyApi : new MyApi(/* args, e.g. http */)
},
deps: [HttpClient]
}]

关于angular - 根据运行时标志提供 API 或模拟版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52375092/

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