是否有办法阻止服务被注入(inject)其原始模块之外?
假设我们正在延迟加载 projects.module.ts
并且 ProjectsModule
正在导入 ProjectsStoreModule
。我在 ProjectsStoreModule
中定义了一个服务,我不想将其注入(inject)到 ProjectsModule
中,但可以将其注入(inject)到 ProjectsStoreModule
内的任何位置>。我想知道是否有办法实现这一目标?
注意: ProjectsStoreModule
没有任何组件,因此我无法向组件提供服务。我想要隔离的服务将被注入(inject) Ngrx Effect,它是一个服务。
我做了什么:
我注册了ProjectsService
:
@Injectable({
providedIn: ProjectsStoreModule
})
export class ProjectsService {
...
}
项目模块:
@NgModule({
...
})
export class ProjectsModule {
...
imports: [ProjectsStoreModule]
}
这种方法显然导致了如此多的循环依赖
警告。
然后我尝试在 @NgModule
装饰器中注册 ProjectsService
:
@NgModule({
...
providers: [ProjectsService]
})
export class ProjectsStoreModule {
...
}
现在的问题是,通过将 ProjectsStoreModule
导入到 ProjectsModule
中,我想要成为内部服务的服务将在 ProjectsModule 中可用
.
任何帮助将不胜感激。
最佳答案
不要使用模块的提供者数组来提供它。如果模块有根组件,则将服务注入(inject)到模块的根组件上。或者只是在注入(inject)服务的任何组件声明中提供它。这将使该服务只能由该组件及其子组件访问。
@Component({
selector: "component",
templateUrl: "./component.component.html",
providers: [
InternalServiceClass
]
})```
关于angular - 如何定义 Angular 内部服务并使其不可注入(inject)到其模块之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441461/