为客户特定功能构建多实例MVC应用程序

时间:2015-11-19 12:04:44

标签: c# asp.net-mvc plugins architecture

我有一个包含以下项目/图层的MVC解决方案:

  • 核心 - 域模型
  • 业务 - 服务和其他业务逻辑
  • DataAccess - NHibernate映射,代码和通用IRepository模式
  • 网络 - MVC项目

我在多实例设置中为多个客户端托管它,并为客户提供定制应用程序以满足其特定需求。大多数情况下,这涉及添加可能适合其他客户端的功能,并使用web.config中的键/值启用/禁用它。

最近,一些客户要求其他客户永远不需要的非常具体的功能。我正在尝试研究如何在我的应用程序中构建它,以便尽可能地将其与标准应用程序完全分开。

在理想的世界中,我在该客户端的解决方案中有一个单独的项目,并且所有内容都存在,但所涉及的功能将触及应用程序的每一层:视图,控制器,Css,图像,新域模型,NHibernate Mapping和新服务。

我不一定在这里寻找灵丹妙药,但我似乎无法在网上找到任何关于此类设置的内容,但这肯定是一个以前解决过的问题?

如果有人能指出我的任何文章的方向,我将非常感激。

1 个答案:

答案 0 :(得分:1)

针对这些要求的干净解决方案是插件架构。

此类解决方案的范围可以从中等复杂到非常复杂,具体取决于所需的灵活性以及是否需要在运行时交换插件。

独立于您选择的路径,您需要在要提供自定义行为的位置引入接口。如果您没有首先为此类案例设计申请,那么这一点就已经具有挑战性了。

然后,你有几个策略:

显式插件配置

使用这种方法,您可以在应用程序启动期间加载某种“客户配置”,并使用它来注册所需的插件。

如果你有一个明确的,干净的composition root并且使用强大的依赖注入容器(我个人可以推荐Autofac,但是有很多选择。)

插件的自动检测和实例化

使用此方法,您的应用程序会自动查找插件(例如,通过查找特定文件夹中的程序集)并加载它们。这涉及更多,因为您需要手动加载程序集和实例化类。如果沿着这条路走下去,MEF可能值得一看。