我正在使用asp.net mvc開發多租戶應用程序。我必須爲每個請求確定承租人,所以我創建了以下類別:如何在mvc c#中處理這種情況?
public class TenantProvider
{
public static Tenant Tenant
{
get
{
Tenant tenant = HttpContext.Current.Items["Tenant"] as Tenant;
if (tenant == null)
{
var tenantUsername = HelperUtility.GetCurrentRequestHost();
//The below line of code is my problem
TenantRepository tenantRepository = new TenantRepository(new AppointContext());
tenant = tenantRepository.GetByUsername(tenantUsername);
HttpContext.Current.Items.Add("Tenant", tenant);
}
return tenant;
}
}
}
此類靜態屬性返回當前請求的承租人。它將首先檢查高速緩存中的Tenant,如果沒有找到,將從數據庫中獲取租戶,初始化緩存並返回Tenant。
爲了得到租客形成數據庫我創建一個TenantRepository實例。 TenantRepository對數據庫上下文具有依賴關係,我在創建實例時傳遞它。
現在,當我必須對當前Tenant執行其他數據庫操作時,我必須在其他某個位置創建新的Repository實例,並且必須通過新的上下文,因此我提取了租戶和新的實際上下文上下文不同,我認爲可能會造成問題。
所以我的問題是我怎麼能處理這種情況,因此在相同情況下例如將使用?
爲什麼不將租戶存儲在索賠中? – Swell
@Swell您能否用一些鏈接或示例代碼來詳細說明您的建議? – user1740381
這是一個關於索賠http://vimeo.com/43549130的迷你速成課程,這是一部來自Dominick Baier的精彩視頻。你也應該看看這個項目https://github.com/brockallen/BrockAllen.MembershipReboot來自Brock Allen。 – Swell