【问题标题】:.Net Core - Multi Tenant Controller Overrides.Net Core - 多租户控制器覆盖
【发布时间】:2017-03-06 22:17:46
【问题描述】:
我希望将多租户添加到我正在开发的 .net 核心 MVC 应用程序中。
我的目标是拥有一个包含基本功能的核心项目,包括控制器、视图、资产等。
然后我希望每个租户有一个单独的项目,它可以覆盖核心项目的默认设置。目前我正在尝试解决覆盖控制器的任务,不仅仅是在控制器级别,而是在控制器中覆盖单个操作的能力。
我应该做什么,我在考虑 IControllerFactory 但不确定这是否是 .net 核心中的正确位置?
我假设通过 IoC 实现这一目标可能会有一段距离,但需要指出正确的方向。
有人对此有什么想法吗?
【问题讨论】:
标签:
asp.net-mvc
asp.net-core
asp.net-core-mvc
multi-tenant
saas
【解决方案1】:
这是我在当前项目中设计的方式,我的要求与您的要求略有不同,因为它是多租户但一个租户可以在多个国家/地区运营,每个租户的功能相同但每个国家/地区不同,希望下面的设计能给你一些想法,帮助你前进。
我将控制器视为一种导航机制,让它们保持轻薄。我每个国家都有一个区域(在您的场景中,这可能是每个租户的一个区域)
每个区域控制器只引用一个基本控制器
基本控制器非常轻巧,因为我们希望能够使用我们的 DI 容器为每个国家/地区实现自定义逻辑。让我们通过编辑场景来获得许可。
Intellisense 播放视图不应该是红色的 :)
Edit permit 调用 _editPermitManager 类型的 IEditPermitManager 注入我们的控制器。我在系统中有两个实现,一个用于新西兰,因为它是一种特殊情况,另一个是所有其他国家/地区都使用的(但您可以轻松地为每个国家/地区实现一个)。
我用 ninject 管理这个注入
流程是用户导航到 /blah/NewZealand/Permit/Edit/4 点击提交,这被定向到新西兰的 Permit 控制器,因此 ninjects 注入新西兰编辑管理器,这在编辑流程中被调用,我也注入一个 INavigationService (_navigationService.Route) 使我能够潜在地指向每个国家/地区的不同视图。
希望这能给你一个起点。