【问题标题】:Best way to load website settings once?一次加载网站设置的最佳方式?
【发布时间】:2010-08-20 12:37:21
【问题描述】:

我仍然需要帮助。我有想要使用单例模式加载的网站设置。使用这种模式有很多负面影响,每个人都建议使用控制反转或依赖注入。我还没有与 IoC 或 DI 合作过。

一次性加载网站设置并在整个 Web 应用程序中使用它的最佳方式是什么?我认为单例模式是理想的,但我想采用最佳实践。另外,有没有人有任何关于使用 IoC 或 DI 加载网站设置的示例代码?甚至有人提到我注入了single的Instance方法,但是因为它还是singleton有什么用呢?此外,如果有人使用 IoC 或 DI 进行一些单元测试重新加载网站设置,我们将不胜感激。

我正在使用 C#。

谢谢 布伦丹

【问题讨论】:

    标签: c# singleton


    【解决方案1】:
    【解决方案2】:

    如果有一个实例是有意义的,那么在这种情况下单例就可以了。一般不会,你可以只用一个静态的。

    如果单例和静态变量是不可变的,则它们的大部分缺点都不存在(这些缺点与全局状态的副作用有关)。

    这里重要的是,从概念上讲,您每次使用应用程序设置时都会查看它们。通过单例或静态执行此操作只会增加性能提升。如果使用不变性使之后无法更改,那么与每次查找设置之间的唯一区别就是性能提升。

    因此,从概念上讲,您并没有引入全局状态,您只是在改进已经存在的全局状态的性能。因此,您并没有让事情变得更糟。

    即使是一些坚决反对全局对象(无论是单例的还是静态的)的人,也会对流程做出例外处理,这也是一种方式。全局日志记录是单向的,因为其他类只写入,从不读取。全局设置是单向的,因为其他类只从它们读取,从不写入。

    【讨论】:

      【解决方案3】:

      有几个选项,你可以使用一个简单的静态类:

      public class ConfigurationBase
      {
          public static string Something
          {
              get { return ConfigurationManager.AppSettings["Something"]; }
          }
      
          // ....
      }
      

      或者试试 Castle Dictionary Adapter:

      http://codebetter.com/blogs/benhall/archive/2010/07/22/improving-testability-with-the-castle-dictionary-adapter.aspx

      取决于您的需求。没有必要过度设计。首先保持简单易读。

      【讨论】:

      • 是的,这可以通过空值检查等进行改进。对于非常简单的项目,我喜欢这种方法,因为它将魔术字符串限制在一个地方
      猜你喜欢
      • 2011-02-23
      • 2021-08-24
      • 1970-01-01
      • 2011-09-20
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多