【问题标题】:Developing multi-tenant application using plugin based architecture with ASP.NET MVC使用基于插件的架构和 ASP.NET MVC 开发多租户应用程序
【发布时间】:2025-12-01 19:00:02
【问题描述】:

我正在使用 ASP.NET MVC 开发一个多租户应用程序,在对多租户和 SaaS 进行了很好的研究之后,我发现有很多资源可用于实现数据层(数据库:按 Schema 分离,按数据库或共享)但可用于实现业务和 UI 层的资源非常有限。

我选择了单独的数据库方法。

现在,为了使其真正实现多租户,我选择了基于插件的架构(如 umbraco 和 Nopcommerce),其中插件是具有基于租户的模型、视图和控制器的 MVC 应用程序。

这是我将如何开发它:

  • 控制器工厂将根据租户(子域)进行初始化

  • 将根据租户注入业务层(使用 DI)。

  • 和UI(视图)将根据插件进行渲染。

但这样一来,一切都是多余的,无法分享共同的行为。

任何人都可以按照我可以分享常见行为的方式来帮助设计它吗?或者有更好的方法吗?

【问题讨论】:

  • 请定义面临的问题,例如如何在 UI / 控制器中具有共同的行为。为每个租户维护单独的 UI / 控制器并不容易,因为您加入了租户并且租户必须等待部署更新才能设置此工作区。这不是最纯粹的多租户级别。分享您的明确问题并提出解决方案。
  • 嗨@Seravanan,感谢您的评论。你是对的,我必须为每个租户添加一个不好的插件。但是假设我有一个通用的注册页面(视图),但验证和几个字段对于每个租户都不同,在这种情况下,如果验证规则和字段不同,我如何使用相同的视图和控制器(但是可以在运行时)。
  • 您可以使用自定义表来存储视图页面 ID、租户 ID 和正则表达式。当特定租户发布数据时运行正则表达式。

标签: asp.net-mvc plugins architecture multi-tenant saas


【解决方案1】:

我已经成功实现了类似的架构,使用 DI/IoC 根据当前登录用户的租户注入正确的配置。 Autofac 提供了开箱即用的多租户功能,我建议您检查一下。

http://docs.autofac.org/en/latest/advanced/multitenant.html

抱歉,答案很简短,在移动设备上写作很有挑战性。稍后当我到达我的电脑时,我将尝试编辑和扩展答案

【讨论】:

  • 不客气。如果您认为这回答了您的问题,如果您将其标记为答案,我将不胜感激。
  • 对你的答案投了赞成票,谢谢,但仍然觉得它不是我想要的。别介意。
最近更新 更多