Angular项目中具有库子项目的单例实例

时间:2019-06-19 13:51:20

标签: angular typescript singleton

我编写了一个模块,该模块实现单例类并导出其实例。

接下来,我用子项目(库)编写一个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应用及其子项目中具有不同的实例,我该如何解决?

0 个答案:

没有答案