N00B这里。 重新问的问题,因为我并没有标注它的权利。
我想利用Autofac的MutliTenant功能。 我有一个例子从源文件的“工作”。 我已经扫描的文档时遇到了问题搞清楚如何“路线”的租户。
目前,我想利用一个基本的CRUD应用程序的单一代码库。 该CRUD应用程序将通过多个不同的网站,只是专注于特定的服务,为个人站点使用。
我想最终做到这一点:
- codebase.website1.com(以1)
- codebase.website2.com(租户2)
- codebase.website3.com(以3)
任何想法或引用? 谢谢。
如果你看看wiki上的Autofac多租户的文档 ,你会发现,你确定租户的方式是通过实施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;
}
}
}
显然,您需要按摩,要为你工作。 你是怎么做的映射,无论你作为默认租户ID返回null与否等
请注意,如果你是基于HTTP请求值的测试,然后任何时间的依赖得到解决,没有网络情况下,你会得到应用级依赖,而不是承租人特定的相关...因为你赢了“T能够识别的租户。 你看在catch块的一个小的神器 - 如果任何依赖关系得到在应用程序启动解决,则不一定是一个Web上下文所以IIS 7.0抛出,当你调用HttpContext.Current一个HttpException。 你必须测试这样的东西。
此外,你要考虑租户ID映射缓存策略,如果是,比方说,一个服务调用或东西贵。 每当你解决一个多租户依赖的战略被调用,所以你要做出战略实施尽可能高效。
我真的建议检查出该文档。 它的长,但那是因为多租户是一个复杂的话题,有很多的地面覆盖。 如果你在那里潜水,你会找到你这样的问题。