【问题标题】:Treeshakeable providedIn-Syntax while separating service interface from implementation(s)Treeshakeable 提供了In-Syntax,同时将服务接口与实现分开
【发布时间】:2021-06-06 13:37:30
【问题描述】:

在我的 Angular 项目中,我想将我的服务拆分为接口(抽象类)和实现(实现这些接口)。例如。来自

import { Injectable } from "@angular/core";
import { ImpyService } from "./implementation/impy.service";

@Injectable({
  providedIn: 'root',
})
export class AggyService {

  doSomething() {
    // ...
  }

}

// "Interface"..

@Injectable({
  providedIn: 'root'
})
export abstract class AggyService {

  abstract doSomething();

}

// & "Implementation..

@Injectable()
export class ImpyService implements AggyService{

  doSomething() {
    // do something
  };

}

现在,由于AggyService 是抽象的,它只能用于注入密钥,我必须将实现指定为注入值/提供者并将其添加到 NgModule、组件或Inject()它'直接'。

例如当希望它在我的 app.module.ts 中全局可用时

@NgModule({
  //  ...,
  providers: [
    { provide: AggyService, useClass: ImpyService }
  ]
})
export class AppModule { }

但是 - 据我所知 - 这可以防止摇晃,因为服务现在已导入 app.module.ts

我发现,我可以像这样在@Injectable()-decorator 中指定提供者

@Injectable({
  providedIn: 'root',
  useClass: ImpyService
})
export abstract class AggyService {

  abstract doSomething();

}

这可行(目前),但似乎也没有记录(例如,参见 https://angular.io/api/core/Injectable)。

我真的不想坚持无证的东西,但我不知道如何以另一种方式做到这一点。

如何解决这个问题?

【问题讨论】:

    标签: angular typescript dependency-injection tree-shaking


    【解决方案1】:

    因为我只是想为此创建一个问题,我发现这已经存在并且似乎将来会添加到文档中...

    (见https://github.com/angular/angular/issues/34107

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多