我编写了一个模块,该模块实现单例类并导出其实例。
接下来,我用子项目(库)编写一个Angular应用程序。导入到主应用程序的子项目和导入到子项目和主应用程序* .component.ts的单例实例。而且我希望我的单例在主应用程序和子项目中具有相同的实例。
但是它们导入不同的实例!
模块代码中的单个声明:
class SocketService {
private static _instance: SocketService;
public static get Instance(){
return this._instance || (this._instance = new this());
}
private constructor(){}
//...
}
export const socket = SocketService.Instance;
现在Angular代码...
在app.component.ts
中:
import {socket} from 'mymodule'
...
export class AppComponent {
constructor(){
socket.initSocket();
socket.isInitialized(); //TRUE
}
}
在second.component.ts
中:
import {socket} from 'mymodule'
...
export class SecondComponent {
CheckSocketState(){
socket.isInitialized(); //TRUE
}
}
但是在mylib.component.ts
中:
import {socket} from 'mymodule'
...
export class MylibComponent {
CheckSocketState(){
socket.isInitialized(); //FALSE!!!
}
}
mylib
已正确附加到app.module.ts
中的主应用程序:
import {MylibComponent } from '../../projects/my-lib/src/public-api'
@NgModule({
declarations: [
AppComponent,
MylibComponent
],
...
然后MylibComponent
导出到mylib.module.ts
:
import { MylibComponent } from './my-lib.component';
@NgModule({
declarations: [MylibComponent ],
exports: [ MylibComponent ]
})
export class MylibComponent{ }
所以,问题是:为什么单例在Angular应用及其子项目中具有不同的实例,我该如何解决?