C# 如何在MVC5中根据传入的请求动态设置连接字符串?

C# 如何在MVC5中根据传入的请求动态设置连接字符串?,c#,asp.net-mvc,dependency-injection,asp.net-mvc-5,C#,Asp.net Mvc,Dependency Injection,Asp.net Mvc 5,我有一个MVC5应用程序,目前仅为单租户,但随着客户群的增长,它变得越来越难以管理 我想把这个应用程序变成一个多租户应用程序,为每个客户端访问一个不同的数据库 客户机的域很容易区分,我可以通过Request.Url.Host或其他方法访问它们,但是一旦我有了这个属性,我就很难在业务逻辑项目中仅在该请求的上下文中设置它 主Web项目引用了业务逻辑项目,但该项目对于请求对象是闪烁的,因此我不知道如何在每次实例化baseDataAccess(包含连接字符串)对象时动态获取会话信息 我在这方面花了很多时

我有一个MVC5应用程序,目前仅为单租户,但随着客户群的增长,它变得越来越难以管理

我想把这个应用程序变成一个多租户应用程序,为每个客户端访问一个不同的数据库

客户机的域很容易区分,我可以通过Request.Url.Host或其他方法访问它们,但是一旦我有了这个属性,我就很难在业务逻辑项目中仅在该请求的上下文中设置它

主Web项目引用了业务逻辑项目,但该项目对于请求对象是闪烁的,因此我不知道如何在每次实例化baseDataAccess(包含连接字符串)对象时动态获取会话信息

我在这方面花了很多时间,并尝试使用Ninject解决依赖关系,但没有成功。我似乎不知道如何让DynamicRequest对象或其任何属性暂时分配给baseDataAccess对象

我最后尝试的是使用OnActionExecuting方法使用和IActionFilter,但我仍然无法确定如何在没有当前请求上下文的项目中动态设置每个请求的URL值

这是我想要动态设置的类。_connectionString是动态属性。我有基于url构建连接字符串的方法,因此,如果我可以动态地、临时地设置_domain属性,我将能够获得连接字符串

public class baseDataAccess : IDataAccess
{
    private static IClientConnection _clientConnection;
    private static string _connectionString;
    public static string _domain;

这是我最后一次尝试,向每个控制器添加OnActionExecuting方法。如何动态地、临时地设置这些属性

    public void OnActionExecuting(ActionExecutedContext filterContext)
    {
        IClientConnection client = new ClientConnectionFactory(Request.Url.Host);
        IDataAccess dataAccess = new baseDataAccess(client);

    }

我对我的申请也有同样的需求。我必须根据用户登录设置带有用户信息的连接字符串。我在
System.Web
上添加了一个引用,以获取我的业务层中的
Session
对象

其主要思想是,将当前用户存储在
会话中,并让业务逻辑使用
HttpContext.current.Session
访问该
会话。现在,我的数据库类可以在每次访问数据库时动态读取连接字符串


由于用户会话可以在任何具有
System.Web
参考的库中使用,因此它可以在应用程序范围内使用。因此,根据用户的请求,在
Session\u Start
事件上设置连接字符串没有问题。

我想您已经为我解决了这个问题。简单的事情我花了很多时间。。。我必须显式地将System.Web程序集添加到项目中,而不是使用已包含的推断System.Web命名空间。