Angular Пользовательская библиотека имеет HTTP-зависимость - inject () должен вызываться из контекста внедрения - PullRequest
0 голосов
/ 01 мая 2020

У меня есть приложение Angular 8, которое использует Сервис из созданной мной пользовательской библиотеки.

Служба выполняет 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(
      );
    }
  };
}

Проблема возникает, когда я вызываю метод getLoggedInUser () этой службы из клиентского приложения, которое установило библиотеку через «npm install».

Кажется что зависимость не выполняется для службы в пользовательской библиотеке, которая, как я думал, произойдет автоматически.

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)

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 01 мая 2020

@ Андрей предоставил ссылку github.com/angular/angular/issues/25813, которая помогла решить проблему.

Я обновил файл angular. json приложения, которое потребляет библиотека и включенные "preserveSymlinks": true в 2 местах:

  1. в разделе "architect" -> "build" -> "options"

  2. для каждой конфигурации в разделе «architect» -> «build» -> «configurations»

Спасибо

...