代码之家  ›  专栏  ›  技术社区  ›  BeetleJuice

角度6 providedIn-如何为依赖项注入自定义@injectable()提供程序?

  •  10
  • BeetleJuice  · 技术社区  · 7 年前

    在角5,如果我有 AbstractClassService ExtendedClassService 这扩展了抽象,我可以在我的ngmodule的providers数组中这样做:

    @NgModule({
      providers: [
        {provide: AbstractClassService, useClass: ExtendedClassService}
      ]
    })
    export class AppModule {}
    

    这样我就可以换了 扩展类服务 用另一个来测试或者其他很容易的方法。这仍然可以用角6来完成,但是新的 providedIn 可在服务内部设置以减小捆绑包大小的选项:

    @Injectable({providedIn: 'root'})
    export class ExtendedClassService extends AbstractClassService {}
    

    有没有一种方法可以让我在使用新的角5时完成相同的事情? 普罗维登丁 ?像这样:

    @Injectable({providedIn: 'root', provide: AbstractClassService})
    export class ExtendedClassService extends AbstractClassService {}
    
    1 回复  |  直到 7 年前
        1
  •  12
  •   BeetleJuice    7 年前

    我需要做两件事。

    首先,使用 implements 而不是 extends 在创建继承类和 不要 使用 providedIn 钥匙在那里:

    @Injectable() // removed providedIn
    export class ExtendedClassService implements AbstractClassService {}
    

    其次,将提供程序指令添加到抽象类中:

    @Injectable({providedIn: 'root', useClass: ExtendedClassService})
    export abstract class AbstractClassService {}
    

    其他提供程序配置( useValue , useExisting , useFactory )也可以在那里使用。

    信贷给阿比尼什 this comment 这让我 the linked blog post . 感谢博客作者!

    推荐文章