2017-05-25 88 views
2

如何配置中間件以根據收入請求的子域更改DBContext連接字符串?多租戶ASP.NET核心

看起來,DBContext設置在Startup ......這看起來還爲時過早以確定HTTPRequest來解析連接字符串。

+0

您可以查看https://github.com/joeaudette/cloudscribe它是一個ASP.NET Core多租戶Web應用程序基礎,包含站點,用戶,角色,聲明等的管理。 –

+0

儘管它在一段時間內沒有更新,但我發現這個項目對於每個租戶使用不同數據庫連接的多租戶非常有幫助。 https://github.com/saaskit/saaskit – Brian

回答

3

嗯,這可能無法滿足您的需求完全,但這裏是我會做:

創建一個DbContextFactory類。這個DbContextFactory類可以創建DbContext的實例,並且可以將任何字符串傳遞給構造函數DbContext。然後注入這個工廠,並且每當你需要一個dbcontext的實例時,只要求工廠爲你返回一個。當然,你必須自己管理創建的上下文的生命週期(即使用塊)。

另一個選項可以是創建DbContextFactory,以便它擁有DbContext的實例。當您向工廠請求一個上下文對象時,工廠會創建一個新對象並將其存儲在專用字段中,隨後的調用將返回同一個實例。使工廠IDisposable和其Dispose()方法,也處置上下文。這樣您就不必擔心管理生命週期(如果使用Scoped註冊)。