【问题标题】:Angular custom library has HTTP dependency - inject() must be called from an injection contextAngular 自定义库具有 HTTP 依赖项 - 必须从注入上下文调用 inject()
【发布时间】:2020-08-15 10:04:09
【问题描述】:

我有一个 Angular 8 应用,它使用我创建的自定义库中的服务。

Service 进行 HTTP 调用,因此它在其构造函数中具有对 HttpClient 实例的依赖关系,如下所示:

import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { User } from '../../models/user.model';
import { GetLoggedInUserInfo } from '../../models/get-logged-in-user-info';

@Injectable({
  providedIn: 'root',
})
export class AuthService {
  constructor(private http: HttpClient) {}

  getLoggedInUser = ({
    apiUrl,
    apiContextRoot,
  }: GetLoggedInUserInfo): Observable<User> => {
      const url = `${apiUrl}${apiContextRoot}/login`;

      return this.http.get<User>(url).pipe(
      );
    }
  };
}

当我从通过“npm install”自定义安装库的客户端应用程序调用此服务的 getLoggedInUser() 方法时,会出现问题。

自定义库中的服务似乎没有满足依赖关系,我认为这会自动发生。

main.ts:12 Error: inject() must be called from an injection context
    at injectInjectorOnly (core.js:728)
    at ɵɵinject (core.js:744)
    at AuthService_Factory (gulfstream-common.js:493)
    at _callFactory (core.js:30485)
    at _createProviderInstance (core.js:30428)
    at resolveNgModuleDep (core.js:30387)
    at NgModuleRef_.get (core.js:31577)
    at resolveDep (core.js:32142)
    at createClass (core.js:31988)
    at createDirectiveInstance (core.js:31806)

有什么想法吗?

谢谢

【问题讨论】:

  • 您能否提供一种如何使用您的AuthService 的方法?
  • github.com/angular/angular/issues/25813 似乎和你的问题一样
  • AuthService 只是对 Node.js 后端服务进行 Http 调用,该服务查询数据库并为特定用户返回一行数据。因为创建的每个应用程序都需要该功能,所以我认为最好将其放在一个易于重用的库中。

标签: angular dependency-injection angular-library


【解决方案1】:

@Andrei 提供了链接 github.com/angular/angular/issues/25813,这有助于解决问题。

我更新了使用该库的应用程序的 angular.json 文件,并在 2 个位置包含 "preserveSymlinks": true

  1. 在“架构师”->“构建”->“选项”下

  2. 对于“architect”->“build”->“configurations”下的每个配置

谢谢

【讨论】:

  • 这解决了我在尝试通过 npm 链接在本地使用库时遇到的问题。
猜你喜欢
  • 2018-12-31
  • 2020-06-26
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多