ASP.NET MVC多租户应用程序问题

时间:2011-10-28 18:35:28

标签: 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>
  </tenant>
  <tenant name="client2" baseUrl="client2.domain.com">
    <settings>
      <setting name="siteName" value="client 2 site">
    </settings>
  </tenant>
</tenants>

在我们的代码中,我们或多或少都有一个租户构建器,它可以从我们的ITenant界面创建具体的类。

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

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

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

  3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

对于第一部分,您可以在动作声明中有一个额外的变量,即:

public ActionResult Index(Itenant tenant)

而不是返回currentTenant.HomeIndex()你可以做

return Action("Index", new { tenant = currentTenant});

会自动运作。 (或者你可以滑动新的{tenant ..}部分,如果你觉得有额外的冒险精神,可以使用自定义模型绑定器!)

第二部分,这实际上是更聪明的方式。如果您想要重定向的自定义安全许可,则必须实现自定义过滤器。