2013-06-21 12 views
1

我有一個WCF服務,在其中實現了一些方法(Operartional Contract)。我需要從Excel加載一些值到字典。我可以加載值。但每次服務成員訪問/使用時都會加載它。如何在WCF服務中只載入一次字典

我不想每次都加載。它足以只加載一次。如何實現這一點。

public class Service1 : IService1 
    { 
     Dictionary<string, List<MappingFields>> MappingCollections; 
     public Service1() 
      { 
      MappingCollections = loadCodes(Location, fileName); 
      } 
    } 
    #region IService1 Members 
     public void TicketTrack(Tickets[] tickets) 
      { 
      ............; 
      ............; 
      } 

回答

1

你可以做這樣的事情:

static Dictionary<string, List<MappingFields>> MappingCollections; 

public void TicketTrack(Tickets[] tickets) 
{ 
    if (MappingCollections == null) MappingCollections = loadCodes(Location, fileName); 

    ... 
} 

這將檢查映射集合的一個實例的存在,如果它不存在,創建它(很可能是分流出一種實用方法)。

0

你可以使用懶人以實現:

private static Lazy<Dictionary<string, List<MappingFields>>> MappingCollections = 
     new Lazy<Dictionary<string, List<MappingFields>>>(x => loadCodes(Location, fileName)); 

    public void TicketTrack(Tickets[] tickets) 
    { 
     var myData = MappingCollections.Value; 
    } 
0

使它成爲一個靜態變量:

private static Dictionary<string, List<MappingFields>> MappingCollections = loadCodes(Location, fileName); 

製作方法 'loadCodes' 亦靜。通過這種方式,字典將只爲AppDomain加載一次。

相關問題