Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 如何使用AutoFac和ASP.Net Core为每个用户指定DbContext_Dependency Injection_Asp.net Core_Autofac_Multi Tenant_Dbcontext - Fatal编程技术网

Dependency injection 如何使用AutoFac和ASP.Net Core为每个用户指定DbContext

Dependency injection 如何使用AutoFac和ASP.Net Core为每个用户指定DbContext,dependency-injection,asp.net-core,autofac,multi-tenant,dbcontext,Dependency Injection,Asp.net Core,Autofac,Multi Tenant,Dbcontext,我正在使用ASP.NETCore和AutoFac构建一个多租户应用程序。将为每个租户分配其自己的数据库(例如,租户将使用数据库A,租户将使用数据库B) 我想使用AutoFac在运行时解析要连接到哪个数据库 我在Startup.cs中进行了设置: public IServiceProvider ConfigureServices(IServiceCollection services) { var containerBuilder = new ContainerBuilder();

我正在使用ASP.NETCore和AutoFac构建一个多租户应用程序。将为每个租户分配其自己的数据库(例如,租户将使用数据库A,租户将使用数据库B)

我想使用AutoFac在运行时解析要连接到哪个数据库

我在Startup.cs中进行了设置:

 public IServiceProvider ConfigureServices(IServiceCollection services)
    {

var containerBuilder = new ContainerBuilder();  

containerBuilder.RegisterType<TenantConnectionStringProvider>()
        .As<IConnectionStringProvider>()
        .WithParameter((paramInfo, componentContext) => paramInfo.Name == "tenantKey",
                  (paramInfo, componentContext) => userSession2.TenantKey)
                  .InstancePerLifetimeScope();

services.AddDbContext<TenantDataContext>(options => {
            var connectionStringProvider = new TenantConnectionStringProvider(userSession2.TenantKey);
            options.UseSqlServer(connectionStringProvider.ConnectionString); });

        containerBuilder.Populate(services);
}
不幸的是,TenantDbContext总是使用TenantA连接字符串设置。即使我单步执行代码并手动设置tenantKey参数的返回值以使其返回TenantB连接字符串,也会发生这种情况


我怎样才能避开这件事?如何让Autofac根据当前租户的相应连接字符串解析和创建DBContext实例?

您是否欣赏@TravisIllig。我将结束这个问题。
public interface IConnectionStringProvider
{
    string ConnectionString { get; set; }
}

public class TenantConnectionStringProvider : IConnectionStringProvider
{
    private string _tenantKey;

    public TenantConnectionStringProvider(string tenantKey)
    {
        _tenantKey = tenantKey;
        ConnectionString = GetConnectionString(_tenantKey);
    }

    public string ConnectionString { get; set; }

    public string GetConnectionString(string tenantKey)
    {
        if (tenantKey == "64C15227-8F9E-4AE4-8620-1986F051FB8F")
        {
            return "TenantA Connection String";
        }
        return "TenantB Connection String";
    }


}