gpt4 book ai didi

angular - 无法将服务注入(inject) Angular Provider UseFactory

转载 作者:行者123 更新时间:2023-12-02 02:29:37 27 4
gpt4 key购买 nike

一些背景信息:我已经使用 Nswag 和 ASP Net Core 创建了一个生成的 API 客户端。要为 api 客户端设置基本 url,使用以下代码:

export const API_BASE_URL = new InjectionToken<string>(
"API_BASE_URL"
);

@Injectable({
providedIn: "root",
})
export class ApiClient {
// Omitting code for brevity

constructor(
@Inject(HttpClient) http: HttpClient,
@Optional() @Inject(API_BASE_URL) baseUrl?: string
) {
this.http = http;
this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : "";
}

// Etc..
}

现在我需要注册那个 API_BASE_URL 以便它可以被注入(inject)到 NotificatiesClient 中。我在我的 app.module.ts 中完成了以下操作:

@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, AppRoutingModule, HttpClientModule],
providers: [
{
provide: NOTIFICATIESERVICE_API_BASE_URL,
useFactory: (serviceToInject: ServiceToInject) => serviceToInject.GetBaseUrl(),
},
],
bootstrap: [AppComponent],
})
export class AppModule {}

假设 ServiceToInject 是这样的服务:

// Note 1: I tried with providedIn: 'root', but that did not make a difference.
// Note 2: This one is stored in src/app/core/services/ServiceToInject.service.ts
@Injectable()
export class ServiceToInject{
// Service here
}

但是当我尝试使用以下代码在我的 app.module.ts 中为 API_BASE_URL 注册提供程序时:

providers: [
{
provide: API_BASE_URL,
useFactory: (serviceToInject: ServiceToInject) => serviceToInject.GetBaseUrl(),
},
],

我收到一个Can't resolve all parameters for useFactory 错误。

有人知道如何解决这个问题吗?

最佳答案

就我而言,答案非常简单!

提供程序代码需要一个名为 deps 的属性,其中包含我在 useFactory 中使用的依赖项类型,如下所示:

{
provide: NOTIFICATIESERVICE_API_BASE_URL,
deps: [AppConfigService],
useFactory: (serviceToInject: ServiceToInject) => serviceToInject.GetBaseUrl(),
},

希望对大家有所帮助!

关于angular - 无法将服务注入(inject) Angular Provider UseFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65254083/

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