У меня есть монорепозиторий 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
, и наоборот. Что здесь происходит?