【问题标题】:ASP.NET MVC Multi Tenant Application QuestionsASP.NET MVC 多租户应用问题
【发布时间】:2011-11-28 17:11:20
【问题描述】:

我们目前正在开发一个 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 接口创建具体的类。

一旦我们能够解决它,一切都会很好地为每个租户呈现我们的网站。但是,我对做两件事的方式感到不舒服。 还要注意,当我们进行依赖注入时,我们没有使用第 3 方 IOC 容器(现在所有 DI 都是自定义的)。

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

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

提前致谢。

【问题讨论】:

    标签: asp.net-mvc-3 dependency-injection multi-tenant


    【解决方案1】:

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

    public ActionResult Index(Itenant tenant)
    

    而不是 return currentTenant.HomeIndex() 你可以这样做

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

    它会自动工作。 (或者您可以跳过新的 {tenant.. } 部分,如果您觉得更有冒险精神,可以使用自定义模型绑定器!)

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

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 2011-05-05
      相关资源
      最近更新 更多