IoC服务中的延迟加载属性

时间:2014-07-07 20:41:09

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

IoC服务应该从DB中检索信息

  • 在会话期间从未改变过。可能这是恒定值。
  • 时间昂贵

我应该在这种情况下使用Pattern" lazy load"封装访问服务方法的属性?例如:

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
   }
} 

1 个答案:

答案 0 :(得分:0)

我认为myDbConstant是一个字段?你不能在任何地方宣布它。我会把它变成一个私有的静态字段 - 你可能还需要为它添加更新锁。

我还会在接口和实现中删除getter,只是将延迟初始化直接放在GetMyDBConstant方法中。

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