gpt4 book ai didi

Angular 7 - build --prod 失败,错误为 : Can't resolve all parameters for

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

我使用 Angular:7.2.10,当我尝试使用命令构建生产项目时:

ng b --prod

我收到错误

ERROR in : Can't resolve all parameters for ApiService in ...

我有一个带有 3 个参数的构造函数的服务:

constructor(api: string, private _http: HttpClient, private httpUtils: HttpUtilsService) {
this.api = `${api}/api`;
}

它由 app.module.ts 中定义的工厂实例化:

{      
provide: ApiService,
useFactory: apiHost,
deps: [Store, HttpClient, HttpUtilsService]
}

api主机

export function apiHost(store: Store<RemoteConfig>, http: HttpClient, httpUtils: HttpUtilsService) {
let item: string = localStorage.getItem(environment.apiHost);

//store.pipe(select(backendApiHost), take(1)).subscribe(api => item = api); // Todo not always read val!
//console.log('ss: ' + item);
return new ApiService(item, http, httpUtils);
}

当我使用 ng build 时,它可以成功运行。

最佳答案

通过检查编译器发出的元数据来隐式解析依赖关系。该元数据源自参数的类型。

在运行时, Angular 注入(inject)器会检查该信息以确定要注入(inject)哪些依赖项。具体来说,它会为每个相应的参数查找已注册的提供程序。

由于您尚未注册映射到为 string 类型的参数发出的元数据的提供程序,因此查找失败并收到错误。您可以为该类型注册一个提供程序,但考虑到字符串的使用范围,这样做并不明智。

但是,Angular 的依赖注入(inject)功能并不限于这种隐式解析。使用 Inject 装饰器和 InjectionToken 的组合,您可以实现您想要的效果。

api-token.ts

import {InjectionToken} from '@angular/core';

export const apiToken = new InjectionToken('api', {
providedIn: 'root',
value: 'myapi'
});

现在您可以使用此 token 来请求解决特定参数的依赖关系。

data.service.ts

import {Inject, Injectable} from '@angular/core';

import {apiToken} from './api-token';

@Injectable({providedIn: 'root'})
export class DataService {
constructor(@Inject(apiToken) api: string) {}
}

关于Angular 7 - build --prod 失败,错误为 : Can't resolve all parameters for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465356/

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