[英]How can I dynamically set connection string in MVC 5 based on incoming request?
我有一個MVC 5應用程序,該應用程序當前僅是單租戶,但是隨着客戶群的增長,這種情況變得難以管理。
我想將此應用程序變成一個多租戶應用程序,為每個客戶端訪問一個不同的數據庫。
客戶端可以通過其域輕松區分,我可以通過Request.Url.Host或其他方法訪問該域,但是一旦擁有此屬性,就很難在該請求的上下文中將其設置在業務邏輯項目中。
主Web項目引用了業務邏輯項目,但是該項目閃爍到Request對象,所以我不知道每次實例化baseDataAccess(包含連接字符串)對象時如何動態獲取該會話信息。
我為此花費了許多時間,並且嘗試使用Ninject來解決依賴關系而沒有成功。 我只是似乎無法弄清楚如何獲取動態Request對象或其任何屬性以瞬時分配給baseDataAccess對象。
我嘗試的最后一件事是使用IActionFilter和OnActionExecuting方法,但是我仍然無法弄清楚如何在沒有當前請求上下文的項目中動態設置每個請求的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
對象。
主要思想是,將當前用戶存儲在Session
並讓業務邏輯使用HttpContext.Current.Session
訪問此Session
,現在我的數據庫類可以在每次對數據庫的每次訪問中動態讀取連接字符串。
而且,由於在具有System.Web
引用的任何庫中都可以使用用戶會話,因此可以在整個應用程序范圍內使用它。 因此,根據用戶的請求在Session_Start
事件上設置連接字符串沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.