如何定义Angular内部服务,并使其无法在其模块外部注入?

问题描述 投票:1回答:1

反正有没有阻止服务注入其原始模块之外的方法?

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

注意: ProjectsStoreModule没有任何组件,因此我无法为组件提供服务。我要隔离的服务将注入作为服务的Ngrx效果。

我做了什么:

我注册了ProjectsService

@Injectable({
    providedIn: ProjectsStoreModule
})
export class ProjectsService {
    ...
}

ProjectsModule:

@NgModule({
    ...
})
export class ProjectsModule {
    ...
    imports: [ProjectsStoreModule] 
}

此方法显然引起了很多Circular dependency警告。

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

@NgModule({
    ...
    providers: [ProjectsService]
})
export class ProjectsStoreModule {
    ...
}

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

任何帮助将不胜感激。

angular dependency-injection lazy-loading angular-services angular-module
1个回答
1
投票

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

@Component({
    selector: "component",
    templateUrl: "./component.component.html",
    providers: [
       InternalServiceClass
    ]
})```
© www.soinside.com 2019 - 2024. All rights reserved.