为客户端特定功能构建多实例 MVC 应用程序
Structuring multi-instance MVC app for client specific features
我有一个 MVC 解决方案 projects/layers:
- 核心 - 领域模型
- 业务 - 服务和其他业务逻辑
- DataAccess - NHibernate 映射、代码和通用 IRepository 模式
- Web - MVC 项目
我在多实例设置中为多个客户托管此应用程序,并为客户提供定制应用程序以满足他们的特定需求。大多数时候,这涉及添加可能适合其他客户的功能,我 enable/disable 它在 web.config.
中带有 key/value
虽然最近,一些客户要求提供其他客户永远不需要的非常具体的功能。我正在尝试弄清楚如何在我的应用程序中构建它,以便尽可能地将它与标准应用程序完全分开。
在理想情况下,我会在该客户的解决方案中有一个单独的项目,并且所有内容都在其中,但所涉及的功能将触及应用程序的每一层:视图、控制器,Css 、图像、新领域模型、NHibernate 映射和新服务。
我不一定要在这里寻找灵丹妙药,但我似乎无法在网上找到任何关于这种设置的内容,但这肯定是以前解决过的问题吗?
如果有人能指出任何与此相关的文章的方向,我将不胜感激。
满足这些需求的一个干净的解决方案是插件架构。
此类解决方案的范围从中等复杂到非常复杂,具体取决于所需的灵活性以及您是否需要能够在运行时更换插件。
与你选择的路径无关,你需要在你想提供自定义行为的地方引入接口。如果您一开始就没有针对此类情况设计应用程序,那么仅此一项就已经具有挑战性。
那么,你有几个策略:
显式插件配置
使用这种方法,您可以在应用程序启动期间加载某种 "customer configuration" 并使用它来注册所需的插件。
如果你有一个明确的、干净的 composition root 并使用一个强大的依赖注入容器(我个人可以推荐 Autofac,但有很多选择。
插件的自动检测和实例化
使用这种方法,您的应用程序会自动找到插件(例如,通过查找特定文件夹中的程序集)并加载它们。这个比较复杂,因为需要手动加载程序集和实例化类。如果你走这条路,MEF 可能值得一看。
我有一个 MVC 解决方案 projects/layers:
- 核心 - 领域模型
- 业务 - 服务和其他业务逻辑
- DataAccess - NHibernate 映射、代码和通用 IRepository 模式
- Web - MVC 项目
我在多实例设置中为多个客户托管此应用程序,并为客户提供定制应用程序以满足他们的特定需求。大多数时候,这涉及添加可能适合其他客户的功能,我 enable/disable 它在 web.config.
中带有 key/value虽然最近,一些客户要求提供其他客户永远不需要的非常具体的功能。我正在尝试弄清楚如何在我的应用程序中构建它,以便尽可能地将它与标准应用程序完全分开。
在理想情况下,我会在该客户的解决方案中有一个单独的项目,并且所有内容都在其中,但所涉及的功能将触及应用程序的每一层:视图、控制器,Css 、图像、新领域模型、NHibernate 映射和新服务。
我不一定要在这里寻找灵丹妙药,但我似乎无法在网上找到任何关于这种设置的内容,但这肯定是以前解决过的问题吗?
如果有人能指出任何与此相关的文章的方向,我将不胜感激。
满足这些需求的一个干净的解决方案是插件架构。
此类解决方案的范围从中等复杂到非常复杂,具体取决于所需的灵活性以及您是否需要能够在运行时更换插件。
与你选择的路径无关,你需要在你想提供自定义行为的地方引入接口。如果您一开始就没有针对此类情况设计应用程序,那么仅此一项就已经具有挑战性。
那么,你有几个策略:
显式插件配置
使用这种方法,您可以在应用程序启动期间加载某种 "customer configuration" 并使用它来注册所需的插件。
如果你有一个明确的、干净的 composition root 并使用一个强大的依赖注入容器(我个人可以推荐 Autofac,但有很多选择。
插件的自动检测和实例化
使用这种方法,您的应用程序会自动找到插件(例如,通过查找特定文件夹中的程序集)并加载它们。这个比较复杂,因为需要手动加载程序集和实例化类。如果你走这条路,MEF 可能值得一看。