我正在尝试在 Angular 中创建一个服务,该服务只能在特定模块内注入,而不能在该模块外部访问。
我有一个服务
MyService
,我想限制它,因此它只能注入到 MyModule
中,而不能注入到应用程序的其他模块中。
我的服务(
my.service.ts
):
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root' // This allows the service to be available globally, which I want to avoid
})
export class MyService {
constructor() {
}
}
我的模块(
my.module.ts
):
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MyService } from './my.service';
@NgModule({
declarations: [],
imports: [CommonModule],
providers: [MyService] // Service should only be injectable here
})
export class MyModule { }
我希望
MyService
只能在 MyModule
内注入,如果我尝试将其注入到其他模块中的组件或服务中,它不应该可用。
我试过:
在模块级别提供服务(
providers: [MyService]
中的MyModule
)。
避免
providedIn: 'root'
来限制全局注入。
如何确保
MyService
只能在MyModule
内注射?
定义服务时删除
provideIn
@Injectable()
export class MyService { ..}
并添加模块的提供者
或者在模块中注入
@Injectable(
provideIn:MyModule
)
export class MyService { ..}
如果您使用独立组件,并且希望两个或更多组件共享同一个服务实例,请检查使用单例模式的SO
要检查服务是否确实只在模块中,您只需尝试在构造函数中将服务注入不属于模块的组件中。这会给您的应用程序带来错误。要检查它是否是服务的同一实例,只需声明一个变量并在任何组件中更改它 - 在其他组件中,服务的变量将是相同的。