- 持久层
- 每个租户都有自己的数据库
- .NET Core
- 我们已经有一个名为
TenantCurrentService
的服务,它从源列表 [主机名、查询字符串等] 返回租户的 ID - 我们已经有一个用于 Entity Framework 的
DbContextFactory
,它会返回一个带有正确连接字符串的 DB 上下文,以供客户端使用 - 我们目前正在使用 ASP.NET Core DI(如果有帮助,愿意进行更改)
- 我们已经有一个名为
- Hangfire
- 无论租户数量如何,都使用单一存储(例如:Postgresql)
- 在适当的容器/ServiceCollection 中执行作业,以便我们检索到正确的数据库、正确的设置等。
我试图将 TenantId 添加到从TenantCurrentService
检索到的作业中(它是一个 Scoped 服务)。
然后当作业被执行时,我们需要从作业中检索 TenantId
并将其存储在 HangfireContext
中,以便 TenantCurrentService
知道从 Hangfire 检索到的 TenantId。然后,我们的应用程序层将能够从我们的 DbContextFactory
连接到正确的数据库。
- 目前,我们已经能够使用
IClientFilter
存储从我们的服务中检索到的 tenantId。 - 我如何从 IServerFilter 中检索我的当前 ASP.NET Core DI ServiceScope(负责检索保存的作业参数),以便我可以调用 .GetRequiredService().IdentifyTenant(tenantId)
是否有关于此问题的好文章/或任何提示可以提供?