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

标签 angular dependency-injection lazy-loading angular-services angular-module

是否有办法阻止服务被注入(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/

相关文章:

javascript - 身份验证,使用 Express JS 将客户端输入的数据与服务器端的 mySql 进行比较

dependency-injection - 如何在构建依赖项时查看消息?

dependency-injection - 有状态对象(非全局)的 IoC 依赖注入(inject)

reactjs - 为什么 webpack 代码分割对我不起作用?

Angular 6 变量未在 Google Chrome 中解析(网络组件)

html - Angular 8 :ERROR TypeError: Cannot read property 'invalid' of undefined

angular - 不能混合使用多个提供者和常规提供者 Angular

dependency-injection - 我如何写入 Aurelia 中的全局变量?

hibernate - 在带有 jpa/hibernate 的 Spring 中,如何保持 session 打开以避免延迟初始化异常?

lazy-loading - 延迟加载 + 同位素