angular - Treeshakeable 提供了In-Syntax,同时将服务接口与实现分开
问题描述
在我的角度项目中,我想将我的服务拆分为接口(抽象类)和实现(实现这些接口)。例如从
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
是抽象的,它只能用于注入密钥,我必须将实现指定为注入值/提供者,并将其添加到providers
NgModule、组件或Inject()
“直接”的 -property 中。
例如,当希望它在我的 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)。
我真的不想坚持无证的东西,但我不知道如何以另一种方式做到这一点。
如何解决这个问题?
解决方案
因为我只是想为此创建一个问题,我发现这已经存在并且似乎将来会添加到文档中......
推荐阅读
- json - 使用短期令牌将 docker 镜像推送到 GCP
- python-3.x - 我不断收到此错误:AttributeError:模块'admin'没有属性'run_admin_options'
- reactjs - 如果我访问我的网站,为什么会显示我的目录索引
- c# - 使用 ASP.NET CORE API 显式访问选项实例并将其传递给 ConfigureServices 中的方法
- git - 强制推送后如何从 GitHub PR 永久删除(或隐藏)提交
- angular6 - Angular Material Datepicker - 更改输出的方法
- ios - Ionic 应用程序未在 info plist 文件中显示各种权限,尽管它们位于 config.xml 中
- sql-server - SQL Server 中的 DATEDIFF
- javascript - 我需要澄清反应的状态和生命周期
- python - Python C-API:PyDict_GetItem 上的分段错误,可能的参考问题?