首页 > 解决方案 > 在多个 NgModule 中提供可重用的单例服务的最佳实践(特别是在 monorepo、Nrwl Nx 样式中)

问题描述

我们有一个 mono repo 并使用 Nx 布局和 /libs。

很多 ....service.ts(服务)可以在多个地方重用。这是问题...

这些服务主要从 REST API 获取,因此设计为保持单例。应该在哪里提供?

我现在的想法是将每个服务包装在一个中NgModule并在那里提供。然后,任何其他模块想要使用该服务都必须导入NgModule.

这样,如果多个模块导入它,则NgModulewith 服务只会被评估一次,并且它提供的服务不会被重新实例化。

另一方面,这会使我的源代码树中的文件数量激增。这一切都值得,还是有更好/更优雅的方式来实现?

标签: angularnrwl-nx

解决方案


我在 monorepo 中所做的是创建一个角度库

ng g lib --tags="type:data-access" user/data-access

然后删除创建的默认模块,因为它不是必需的。

然后创建一个服务

ng g s --project=user-data-access User

这将添加

@Injectable({ providedIn: 'root' })

这将使它成为应用程序中的单例,并在根应用程序模块中提供它。

然后确保将服务导出到index.ts文件中


推荐阅读