Asp.net mvc 3 ASP.NET MVC多租户应用程序问题

Asp.net mvc 3 ASP.NET MVC多租户应用程序问题,asp.net-mvc-3,dependency-injection,multi-tenant,Asp.net Mvc 3,Dependency Injection,Multi Tenant,我们目前正在开发一个asp.net mvc3(aspx)多租户网站。我们在web.config中创建了一个租户配置部分,其结构如下: <tenants> <tenant name="client1" baseUrl="client1.domain.com"> <settings> <setting name="siteName" value="client 1 site"> </settings> &

我们目前正在开发一个asp.net mvc3(aspx)多租户网站。我们在web.config中创建了一个租户配置部分,其结构如下:

<tenants>
  <tenant name="client1" baseUrl="client1.domain.com">
    <settings>
      <setting name="siteName" value="client 1 site">
    </settings>
  </tenant>
  <tenant name="client2" baseUrl="client2.domain.com">
    <settings>
      <setting name="siteName" value="client 2 site">
    </settings>
  </tenant>
</tenants>

在我们的代码中,我们或多或少有一个租户生成器,它从我们的ITenant接口创建具体的类

一旦我们能够解决这个问题,每一个租户都能很好地呈现我们的站点。但是我觉得我们做两件事的方式不舒服。另外请注意,在进行依赖项注入时,我们没有使用第三方IOC容器(所有DI现在都是自定义的)

  • 控制器操作覆盖-目前,我们的租户中有一些方法充当控制器操作覆盖(返回ActionResult),这些方法在实际控制器操作中调用。例如,如果我们需要特定于租户的Home/Index逻辑,我们可以这样做:return currentTenant.HomeIndex()我可以使用ControllerFactory或ServiceLocator而不是这样做吗?如果是这样,有人能解释一下最好的方法吗?

  • 访问-现在我们的两个租户等同于以下内容:client1=免费用户,client2=付费用户当我们使用MembershipProvider授权用户时,我们创建了一个ActionFilter,用于检查用户类型/级别并继续或重定向到相应的站点。有没有更聪明的方法进行这些检查?


  • 提前感谢。

    对于第一部分,您可以在操作声明中添加一个额外变量,即:

    public ActionResult Index(Itenant tenant)
    
    而不是返回currentTenant.HomeIndex()

    return Action("Index", new { tenant = currentTenant});
    
    这将自动工作。(或者您可以跳过新的{tenant..}部分,如果您觉得特别有冒险精神,可以使用自定义模型绑定器!)

    第二部分,这实际上是更聪明的方法。如果您希望通过重定向获得自定义安全许可,则必须实现自定义筛选器