在Angular中,依赖注入(DI)是构建服务和组件的核心机制。默认情况下,Angular DI是基于单例模式运作的,这意味着服务在整个应用程序中只有一个实例,并且在每个组件和模块中都是共享的。
但是,有时候我们需要在不同的模块中使用不同的实例,而不是共享一个单例。这时可以使用Angular提供的“ providedIn ”属性来解决这个问题。
例如,在以下示例中,我们有两个模块:AppModule和AdminModule,它们都要使用UserService:
// user.service.ts
@Injectable({ providedIn: 'root' }) export class UserService { ... }
// app.module.ts
@NgModule({ declarations: [ ... ], imports: [ ... ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
// admin.module.ts
@NgModule({ declarations: [ ... ], imports: [ ... ], providers: [ UserService ], bootstrap: [AdminComponent] }) export class AdminModule { }
我们将UserService的“ providedIn ”属性设置为“ root ”,这意味着它将作为整个应用程序的根级提供。
在AdminModule中,我们将UserService的提供商列表中添加了UserService。这将创建AdminModule的本地UserService实例,而不是共享整个应用程序中的一个UserService实例。
通过这种方式,我们可以确保每个模块都使用自己的实例,而不是与其他模块共享同一个实例。