在 NestJS 模块(Module)中,providers
和 exports
两个属性有不同的作用和用途。
providers:
providers
属性用于声明该模块提供的服务(Service)或提供者(Provider)。- 在
providers
数组中列出的服务将在该模块的上下文中创建和管理,并且可以在模块的组件(例如控制器、其他服务等)中通过依赖注入来使用。 - 通常,你将在
providers
数组中列出你的服务类,以便它们可以被其他组件注入和使用。 - 示例:
@Module({ providers: [AuthService, UserService], }) export class AuthModule {}
exports:
exports
属性用于声明该模块中哪些服务可以被其他模块导出和使用。- 在
exports
数组中列出的服务将在模块之外可见,其他模块可以将它们导入并使用。 - 如果你希望其他模块能够访问当前模块中的某些服务,你需要将这些服务列在
exports
数组中。 - 示例:
@Module({ providers: [AuthService, UserService], exports: [AuthService], // 导出 AuthService,使其可以在其他模块中使用 }) export class AuthModule {}
总结:
providers
用于声明模块内部的服务,它们在模块内创建和管理。exports
用于声明哪些服务可以被其他模块访问,它们可以在其他模块中导入并使用。
使用这两个属性,你可以控制模块的可见性,使某些服务只在模块内部使用,而将另一些服务暴露给其他模块。这有助于将 NestJS 应用程序构建成模块化和可维护的结构。