我正在使用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