美文网首页SAPSAPSAP 实用篇
Angular依赖注入UseClass和UseExisting的

Angular依赖注入UseClass和UseExisting的

作者: _扫地僧_ | 来源:发表于2021-02-03 10:35 被阅读0次

    例子:

    import { Injectable } from '@angular/core';
    
    let count = 0;
    
    @Injectable()
    export class MyService {
      seed: number;
      _count: number;
      constructor(){
        this.seed = Number((Math.random() * 100).toFixed(0));
        this._count = count++;
        console.log('diablo constructor called: ' + this.seed);
      }
    }
    

    Service构造函数的断点只触发了一次:


    这个单例行为在Angular DI帮助文档里有提到:

    https://angular.io/guide/glossary#injector


    什么时候会失去单例的特性呢?看这个例子:

    import { Injectable } from '@angular/core';
    
    @Injectable()
    export class MyService {
      seed: number;
      constructor(){
        this.seed = Number((Math.random() * 100).toFixed(0));
        console.log('diablo constructor called: ' + this.seed);
      }
    }
    
    @Injectable()
    export class MyNewService {
      seed: number;
      text: 'NewService';
      constructor(){
        this.seed = Number((Math.random() * 100).toFixed(0));
        console.log('diablo constructor called: ' + this.seed);
      }
    }
    

    NgModule里的定义:

    表面上看,请求MyService时,也使用MyNewService进行类的实例化,似乎我们会得到MyNewService的单例。

      constructor(old: MyService, newS: MyService) {
        this.test();
        console.log('ok');
      }
    

    其实不然,测试发现:我们得到了两个不同的MyNewService实例:

    根据token(MyService)拿到factory(MyNewService_Factory):

    第二次触发,token变成了MyNewService:

    用了useExisting之后的效果:

    相关文章

      网友评论

        本文标题:Angular依赖注入UseClass和UseExisting的

        本文链接:https://www.haomeiwen.com/subject/akcdvktx.html