gpt4 book ai didi

asp.net-mvc - Multi-Tenancy 和插件的 ASP.NET MVC 模式?

转载 作者:行者123 更新时间:2023-12-01 06:40:10 25 4
gpt4 key购买 nike

我试图了解如何在解决方案中创建一个作为 VS2010 项目存在的 ASP.NET MVC 站点,然后对于多个“租户”,我将创建一个从该站点继承的站点。这样可以灵活地将模块化功能添加到一个而不影响另一个,并且两者都可以从核心库优化中受益。

这是一个疯狂的想法吗?这种事情存在哪些模式?我为基于 web 的站点做了类似的事情(将 DLLS 添加为插件),但在 MVC 中没有。

“租户”是商业客户。每个都已经拥有自己的 MSSQL 数据库并围绕它们进行单独的处理,每个客户端都在自己的孤岛中。数据库与这里和那里添加的一些功能相似,它们分别进行版本控制和部署,整个过程运行良好。一个客户端有 n 个登录。我想开发一个单一的“基础站点”,然后可以用来为租户提供功能,并且租户的所有事件都被隔离到一个数据库中。事情变得丑陋的地方是我如何向一个租户站点添加新组件(例如论坛),而不会破坏其他租户的站点体验。

所有想法都表示赞赏。谢谢。

最佳答案

我在开发 Multi-Tenancy Web 应用程序方面进行了大量工作。以下是帮助您入门的三个基本指针:

安全

TenantId 是登录凭据的一部分。这些存储在 Thread.CurrentPrincipal 中。这有效地将每个请求(线程)绑定(bind)到特定用户,从而绑定(bind)到租户。可以从任何代码轻松访问 Thread.CurrentPrincipal。

数据库

我们使用单个数据库来存储所有数据。在特定于一个租户( Multi-Tenancy )的表(实体)和不是(跨租户)的表之间进行了分离。 Multi-Tenancy 表有一个名为“TenantId”的列。在我们的实体模型中,我们确保这些实体继承自一个特殊的 IMultiTenant 接口(interface)。此接口(interface)包含 TenantId 字段的 C# 等效项。我们扩展了 Entity Framework 的架构,为 Multi-Tenancy 实体提供对 TenantId 的默认过滤。这确保了一个租户永远无法访问或修改另一个租户的数据。

插件

为了支持租户特定代码的实现,我们使用了一些依赖注入(inject)技巧。基于当前的 TenantId,我们的 DI 容器注入(inject)该接口(interface)的特定于租户的实现。

关于asp.net-mvc - Multi-Tenancy 和插件的 ASP.NET MVC 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11472926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com