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



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

假设我们正在懒惰地加载projects.module.tsProjectsModule正在导入ProjectsStoreModule。我在ProjectsStoreModule中定义了一个服务,我不想在ProjectsModule中注入,但是可以在ProjectsStoreModule内的任何地方注入。我想知道是否有办法实现这一目标?

注意:ProjectsStoreModule没有任何组件,所以我无法为组件提供服务。我想要隔离的服务将被注入到Ngrx效果中,这是一个服务。

我做了什么:

我注册了ProjectsService

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

项目模块:

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

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

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

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

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

任何帮助将不胜感激。

不要使用模块的提供程序数组提供它。在模块的根组件上注入服务(如果模块有(。或者只是在注入服务的任何组件声明中提供它。这将使服务仅对组件及其子组件可访问。

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

是的,有一种方法可以防止服务被注入到其原始模块之外。

首先,您必须为您的服务创建一个模块,即ProjectServiceModule

稍后,使用新创建的ProjectServiceModule注册服务,如下所示:

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

现在在 NgModule 中包含ProjectServiceModule

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

此解决方案将在构建应用程序时消除循环依赖项错误,并解决您的问题,因为此模块仅在ProjectsStoreModule中导入

请参阅此链接以获取更多信息

最新更新