多租户ASP.NET核心
问题描述:
如何配置中间件以根据收入请求的子域更改DBContext连接字符串?多租户ASP.NET核心
看起来,DBContext设置在Startup
......这看起来还为时过早以确定HTTPRequest来解析连接字符串。
答
嗯,这可能无法满足您的需求完全,但这里是我会做:
创建一个DbContextFactory
类。这个DbContextFactory
类可以创建DbContext
的实例,并且可以将任何字符串传递给构造函数DbContext
。然后注入这个工厂,并且每当你需要一个dbcontext的实例时,只要求工厂为你返回一个。当然,你必须自己管理创建的上下文的生命周期(即使用块)。
另一个选项可以是创建DbContextFactory
,以便它拥有DbContext
的实例。当您向工厂请求一个上下文对象时,工厂会创建一个新对象并将其存储在专用字段中,随后的调用将返回同一个实例。使工厂IDisposable
和其Dispose()
方法,也处置上下文。这样您就不必担心管理生命周期(如果使用Scoped注册)。
您可以查看https://github.com/joeaudette/cloudscribe它是一个ASP.NET Core多租户Web应用程序基础,包含站点,用户,角色,声明等的管理。 –
尽管它在一段时间内没有更新,但我发现这个项目对于每个租户使用不同数据库连接的多租户非常有帮助。 https://github.com/saaskit/saaskit – Brian