.Net核心 - 多租户控制器覆盖

时间:2017-03-06 22:17:47

标签: asp.net-mvc asp.net-core asp.net-core-mvc multi-tenant saas

我希望将多租户添加到我正在开发的.net核心MVC应用程序中。

我的目标是建立一个核心项目,其中包含基本功能,包括控制器,视图,资产等。

然后我希望每个租户有一个单独的项目,它可以覆盖核心项目的默认值。目前我正在尝试解决覆盖控制器的任务,不仅仅是在控制器级别,而是能够覆盖控制器中的各个动作。

我应该做些什么呢?我在考虑IControllerFactory,但不确定这是否是.net核心中的正确位置?

我假设IoC可能会实现这一目标,但需要指向正确的方向。

有人对此有任何想法吗?

1 个答案:

答案 0 :(得分:1)

这是我在当前项目中设计它的方式,我的要求与您的要求略有不同,因为它的多租户但租户可以在多个国家运营,每个租户的功能相同但每个国家不同,下面的设计有望为您提供一些帮助您的方法。

我将控制器视为导航机制,让它们保持轻薄。我每个国家/地区都有一个区域(在您的方案中,这可能是每个租户的一个区域)

enter image description here

每个区域控制器只是引用一个基本控制器

enter image description here

基本控制器非常轻巧,因为我们希望能够使用我们的DI容器为每个国家/地区实现自定义逻辑。让我们通过编辑方案来获取许可证。

enter image description here Intellisense播放视图不应该是红色的:)

编辑许可证调用_editPermitManager,它是IEditPermitManager类型注入我们的控制器。我在新西兰的系统中有两个这样的实现,因为它是一个特殊情况,一个是所有其他国家使用的(但你可以轻松地在每个国家实施)。

enter image description here

enter image description here

我用ninject管理这个注入 enter image description here

流程是用户导航到/ blah / NewZealand / Permit / Edit / 4点击提交这是指向NewZealand的Permit控制器因此ninjects注入New Zealand编辑管理器并且这在编辑流程上被调用,我也注入了INAVigationService(_navigationService.Route)使我可以根据每个国家/地区指向不同的视图。

希望这能为您提供一个起点。