Treeshakeable providedIn-Syntax 同时将服务接口与实现分开
Treeshakeable providedIn-Syntax while separating service interface from implementation(s)
在我的 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
是抽象的,它只能用于注入密钥,我必须将实现指定为注入 value/provider 并将其添加到 providers
- 属性 在 NgModule、组件中,或者 Inject()
它 'directly'.
例如当希望它在我的 app.module.ts
中全局可用时
@NgModule({
// ...,
providers: [
{ provide: AggyService, useClass: ImpyService }
]
})
export class AppModule { }
但是-据我所知-这可以防止 tree-shaking,因为该服务现在是在 app.module.ts
.
中导入的
我发现,我可以像这样在 @Injectable()
-装饰器中指定提供者
@Injectable({
providedIn: 'root',
useClass: ImpyService
})
export abstract class AggyService {
abstract doSomething();
}
这有效(目前),但似乎也没有记录(例如参见 [=19=])。
我真的不想坚持未记录的东西,但我不知道如何用另一种方式做到这一点。
怎么办?
因为我只是想为此创建一个问题,我发现它已经存在并且似乎会在将来的某个地方添加到文档中...
在我的 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
是抽象的,它只能用于注入密钥,我必须将实现指定为注入 value/provider 并将其添加到 providers
- 属性 在 NgModule、组件中,或者 Inject()
它 'directly'.
例如当希望它在我的 app.module.ts
中全局可用时@NgModule({
// ...,
providers: [
{ provide: AggyService, useClass: ImpyService }
]
})
export class AppModule { }
但是-据我所知-这可以防止 tree-shaking,因为该服务现在是在 app.module.ts
.
我发现,我可以像这样在 @Injectable()
-装饰器中指定提供者
@Injectable({
providedIn: 'root',
useClass: ImpyService
})
export abstract class AggyService {
abstract doSomething();
}
这有效(目前),但似乎也没有记录(例如参见 [=19=])。
我真的不想坚持未记录的东西,但我不知道如何用另一种方式做到这一点。
怎么办?
因为我只是想为此创建一个问题,我发现它已经存在并且似乎会在将来的某个地方添加到文档中...