小编sim*_*Vin的帖子

asp.net core 3.1 将 autofac 与 finbuckle 集成

我正在构建一个带有多个数据库的多租户 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)

c# autofac asp.net-core

3
推荐指数
1
解决办法
798
查看次数

标签 统计

asp.net-core ×1

autofac ×1

c# ×1