如果您退房the Autofac multitenant documentation on the wiki您会注意到您确定租户的方式是实施ITenantIdentificationStrategy
。在该wiki页面上给出了一个示例,其中显示了如何从请求中的参数获取租户,如查询字符串。
很容易修改示例以查看请求的其他部分 - 主机名,域名或其他任何内容。
using System;
using System.Web;
using AutofacContrib.Multitenant;
namespace DemoNamespace
{
public class DomainStrategy : ITenantIdentificationStrategy
{
public bool TryIdentifyTenant(out object tenantId)
{
tenantId = null;
try
{
var context = HttpContext.Current;
if(context != null && context.Request != null)
{
var site = context.Request.Url.Authority;
// Here's where you map the site to the tenant ID:
tenantId = MapTheSiteToTheTenantId(site);
}
}
catch(HttpException)
{
// Happens at app startup in IIS 7.0
}
return tenantId != null;
}
}
}
显然你需要按摩它才能为你工作。你是如何做映射的,无论你是否返回null作为默认租户ID等等。
请注意,如果您基于HTTP请求值进行测试,则任何时候解析依赖关系并且没有网络上下文中,您将获得应用程序级依赖性,而不是租户特定的依赖性......因为您无法识别租户。您会在catch块中看到一个很小的工件 - 如果在应用程序启动时任何依赖项得到解决,则不一定有Web上下文,因此在调用HttpContext.Current时,IIS 7.0会抛出HttpException。你必须测试这样的东西。
此外,如果服务电话或服务电话昂贵,您将需要考虑租户ID映射的缓存策略。每次解决多租户依赖时,策略都会被调用,因此您希望尽可能高效地实施策略。
I would really recommend checking out that documentation.这很长,但这是因为多租户是一个复杂的话题,并且有很多理由可以覆盖。如果你潜入那里,你会发现这样的问题的答案。
此底层CRUD应用程序是否是从不同网站的代码中调用的单个运行实例?如果是这样,它的架构是什么? –
@MarcL。我在想IIS 7.0,Win 2008 R2。是的,单个实例将被网站1或2或3调用。因此,在网站1上,将会有一个链接到codebase.website1.com等等。每个用户都将被认证,但是,基于该网站,所以来自网站2的用户2无法登录到codebase.website1.com。我希望这是有道理的。 – REMESQ