微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Treeshakeable 提供In-Syntax,同时将服务接口与实现分开

如何解决Treeshakeable 提供In-Syntax,同时将服务接口与实现分开

在我的 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 中的 providers-property 、组件或 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)。

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

如何解决这个问题?

解决方法

因为我只是想为此创建一个问题,我发现它已经存在并且似乎在未来的某个地方被添加到文档中......

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。