问题描述
在我的 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)。
我真的不想坚持无证的东西,但我不知道如何以另一种方式做到这一点。
如何解决这个问题?
解决方法
因为我只是想为此创建一个问题,我发现它已经存在并且似乎在未来的某个地方被添加到文档中......