Почему я получаю две копии Injectable? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть монорепозиторий Angular 9 с библиотекой и приложением. В библиотеке есть служба (@Injectable()), на которую есть ссылки в библиотеке компонентов и служб, а также в других службах приложения. Я не могу понять, почему классы в библиотеке и приложении имеют разные экземпляры одного и того же @Injectable. Соответствующие источники выглядят примерно так:

apps / myapp / src / app / services / app.service.ts

import { Injectable } from '@angular/core';
import { SomeService } from '@lib/services';

@Injectable()
export class AppService {
  constructor(public libSvc: SomeService) { }
}

libs / mylib / src / lib / services / some. service.ts

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

@Injectable()
export class SomeService { }

apps / myapp / src / app / components / some.component.ts

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

import { AppService } from '@app/services';
import { SomeService } from '@lib/services';

@Component()
export class SomeComponent {

  public somevar: string;

  constructor(
    public appSvc: AppService,
    public libSvc: SomeService
  ) { }

  someMethod() {
    if (this.appSvc.libSvc !== this.libSvc) {
      console.log('Services are different');
    }
  }
}

, где apps/myapp/tsconfig.app.json содержит

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "baseUrl": "src",
    "paths": {
      "@app/*": ["app/*"],
      "@lib/*": ["../../../libs/mylib/src/lib/*"]
    }
  }
}

и libs/mylib/tsconfig.lib.json содержит

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "baseUrl": "src",
    "paths": {
      "@lib/*": ["lib/*"]
    }
  }
}

Когда вызывается someMethod, на консоль выводится «Службы отличаются». Похоже, есть два экземпляра Injectable вместо одного, как я ожидал. Переменные экземпляра в этих двух имеют разные значения, т.е. если я установлю AppService.libSvc.somevar в значение в AppService, значение не будет установлено в SomeService.somevar, и наоборот. Что здесь происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...