我如何“白标”我的ASP.Net MVC应用程序?

时间:2009-09-24 19:15:36

标签: asp.net-mvc themes conditional-compilation white-labelling

我有一个安装在多个客户服务器上的“white labelled”应用程序。在任何给定的安装上,差异将包括内容,样式表和图形,但也包括一些实际的代码/业务逻辑。我希望我的TFS服务器自动构建我的应用程序的所有风格。这样做有什么选择?例如我应该使用主题吗?那么#if条件编译标志呢。

P.S。问题不在于如何设置构建服务器 - 我已经这样做了。

2 个答案:

答案 0 :(得分:3)

对于业务逻辑,我会将差异抽象为单独的库,然后您可以使用IoC / DI模式或提供程序模式在运行时解析正确的业务逻辑。

至于内容,我会研究主题。基本上你可以让你的构建服务器构建一次所有代码,然后在打包代码时选择你需要的程序集并使用适当的配置,并为手头的客户端选择适当的主题文件夹。

在这种情况下我不喜欢使用#指令。如果您考虑一下,您的单元测试必须针对您拥有的每个条件运行。如果删除条件并抽象差异,单元测试可以立即在所有可插拔组件上运行。

答案 1 :(得分:-1)

  1. 内容/图片 - 您可以制作自己的HtmlHelper / UrlHelper扩展程序以执行Html \ Url.Content()以便为正确的客户提取正确的内容,此外还可以从正确的文件夹中复制所需的文件(这很简单,/ Content + / ContentCustomer1,2,...)。
  2. 我想,没有一个答案。一个简单的答案是将Order.Calculate()方法移动到部分类,以便您拥有
    • OrderPartsForCustomer1.cs
    • OrderPartsForCustomer2.cs
  3. 你将拥有

    public partial class Order
    {
       public Money Calculate()
       {
       }
    }
    

    然后你只需要包含所需的.cs类,不要用#ifs混乱你的代码。

    如果您想要所有的公共代码,并且仅为特定客户覆盖,您可以拥有OrderPartsCommon.cs,如果没有客户特定的覆盖,您将复制/使用。