Autofac多租户 - 我怎么路线的子域?(Autofac MultiTenant - how d

2019-07-29 18:01发布

N00B这里。 重新问的问题,因为我并没有标注它的权利。

我想利用Autofac的MutliTenant功能。 我有一个例子从源文件的“工作”。 我已经扫描的文档时遇到了问题搞清楚如何“路线”的租户。

目前,我想利用一个基本的CRUD应用程序的单一代码库。 该CRUD应用程序将通过多个不同的网站,只是专注于特定的服务,为个人站点使用。

我想最终做到这一点:

  • codebase.website1.com(以1)
  • codebase.website2.com(租户2)
  • codebase.website3.com(以3)

任何想法或引用? 谢谢。

Answer 1:

如果你看看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映射缓存策略,如果是,比方说,一个服务调用或东西贵。 每当你解决一个多租户依赖的战略被调用,所以你要做出战略实施尽可能高效。

我真的建议检查出该文档。 它的长,但那是因为多租户是一个复杂的话题,有很多的地面覆盖。 如果你在那里潜水,你会找到你这样的问题。



文章来源: Autofac MultiTenant - how do I route to a subdomain?