我有一个包含以下项目/图层的MVC解决方案:
我在多实例设置中为多个客户端托管它,并为客户提供定制应用程序以满足其特定需求。大多数情况下,这涉及添加可能适合其他客户端的功能,并使用web.config中的键/值启用/禁用它。
最近,一些客户要求其他客户永远不需要的非常具体的功能。我正在尝试研究如何在我的应用程序中构建它,以便尽可能地将其与标准应用程序完全分开。
在理想的世界中,我在该客户端的解决方案中有一个单独的项目,并且所有内容都存在,但所涉及的功能将触及应用程序的每一层:视图,控制器,Css,图像,新域模型,NHibernate Mapping和新服务。
我不一定在这里寻找灵丹妙药,但我似乎无法在网上找到任何关于此类设置的内容,但这肯定是一个以前解决过的问题?
如果有人能指出我的任何文章的方向,我将非常感激。
答案 0 :(得分:1)
针对这些要求的干净解决方案是插件架构。
此类解决方案的范围可以从中等复杂到非常复杂,具体取决于所需的灵活性以及是否需要在运行时交换插件。
独立于您选择的路径,您需要在要提供自定义行为的位置引入接口。如果您没有首先为此类案例设计申请,那么这一点就已经具有挑战性了。
然后,你有几个策略:
使用这种方法,您可以在应用程序启动期间加载某种“客户配置”,并使用它来注册所需的插件。
如果你有一个明确的,干净的composition root并且使用强大的依赖注入容器(我个人可以推荐Autofac,但是有很多选择。)
使用此方法,您的应用程序会自动查找插件(例如,通过查找特定文件夹中的程序集)并加载它们。这涉及更多,因为您需要手动加载程序集和实例化类。如果沿着这条路走下去,MEF可能值得一看。