我正在构建一个带有多个数据库的多租户 asp.net core 3.1 应用程序(每个租户一个,一个主数据库)。我正在使用 Autofac 为我的服务提供单租户终身支持(现在我不需要租户覆盖,我只需要自定义 SinglePerTenant 生命周期)我正在使用
我的租户识别策略涉及对主数据库的 db 调用。
正如 autofac 的文档中所写,识别策略不应该调用数据库,因为它在每个依赖项解析中都会被调用。然后我使用了另一种租户识别解决方案(Finbuckle.MultiTenant)。
使用 Finbukle 在请求到达时调用他的识别策略(每个 htp 请求一次),我将 db 调用放在他的识别策略中(为了优化我可以缓存结果,并每天刷新一次查询)并设置一个租户信息对象在 HttpContext 中。
然后在 AutoFac 识别策略中,我尝试读取 FinBuckle 设置的对象,但这是不可能的,因为 Autofac 识别策略在 FinBuckle 之前调用,并且所需的属性为空。
我的 Program.cs 是:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacMultitenantServiceProviderFactory(Startup.ConfigureMultitenantContainer))
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Run Code Online (Sandbox Code Playgroud)
启动.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { …Run Code Online (Sandbox Code Playgroud)