【发布时间】: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