如何定义 Angular 内部服务并使其不可注入到其模块之外?

Ham*_*nam 5 dependency-injection lazy-loading angular-services angular-module angular

是否有办法防止服务被注入到其原始模块之外?

假设我们正在projects.module.ts延迟加载并ProjectsModule导入ProjectsStoreModule. 我定义了一个服务ProjectsStoreModule,我不想将其注入到 中ProjectsModule,但可以将其注入到 中的任何位置ProjectsStoreModule。我想知道是否有办法实现这一目标?

注意: ProjectsStoreModule没有任何组件,因此我无法向组件提供服务。我想要隔离的服务将被注入到 Ngrx Effect 中,这是一个服务。

我做了什么:

我注册了ProjectsService

@Injectable({
    providedIn: ProjectsStoreModule
})
export class ProjectsService {
    ...
}
Run Code Online (Sandbox Code Playgroud)

项目模块:

@NgModule({
    ...
})
export class ProjectsModule {
    ...
    imports: [ProjectsStoreModule] 
}
Run Code Online (Sandbox Code Playgroud)

这种做法显然引起了如此多的Circular dependency警告。

ProjectsService然后我尝试在装饰器中注册@NgModule

@NgModule({
    ...
    providers: [ProjectsService]
})
export class ProjectsStoreModule {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,通过将 导入ProjectsStoreModule到 中ProjectsModule,我想要成为内部服务的服务将在 中可用ProjectsModule

任何帮助将不胜感激。

bri*_*ter 4

不要使用模块的提供者数组来提供它。如果模块有根组件,则将服务注入到模块的根组件上。或者只是在注入服务的任何组件声明中提供它。这将使该服务只能由该组件及其子组件访问。

@Component({
    selector: "component",
    templateUrl: "./component.component.html",
    providers: [
       InternalServiceClass
    ]
})```
Run Code Online (Sandbox Code Playgroud)