【问题标题】:Lazy load property in IoC serviceIoC 服务中的延迟加载属性
【发布时间】:2014-07-08 04:55:46
【问题描述】:

IoC 服务应该从数据库中检索信息

  • 在会话期间从未更改。可能这是恒定值。
  • 时间很宝贵

在这种情况下,我应该对封装对服务方法的访问的属性使用“延迟加载”模式吗?例如:

public interface IMyDbConstantService {
   string MyDbConstant {get;} 
   string GetMyDbConstant();
}

public class MyDbConstantService: IMyDbConstantService {

   public string MyDbConstant 
   { 
      get
      {
        // Implementing lazy load pattern
        return myDbConstant  ?? (myDbConstant = this.GetMyDbConstant());
      }
   }


   public string GetMyDbConstant() {
     // time expensive operation
   }
} 

【问题讨论】:

    标签: dependency-injection inversion-of-control lazy-loading


    【解决方案1】:

    我假设 myDbConstant 是一个字段?你没有在任何地方声明它。我会将其设为私有静态字段——您可能还需要为其更新添加锁。

    我也会去掉接口和实现中的getter,直接把惰性初始化放到GetMyDBConstant方法中。

    至于这是否是一个好主意:您没有提供足够的信息来说明一种或另一种方式。在第一次使用时加载是否更有意义,或者您可以在应用程序启动时加载它,可能在后台线程中?

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多