2017-01-17 6 views
0

Ich habe eine Klasse, die zu einem wcfZugangsdaten von einer Klasse zur anderen C#

public class Network 
{ 
    private const string PROXY_HOSTNAME_PARAM = "ProxyHostname";   
    public string GetMyNetwork() 
    { 
     MyProxy myprox = MyProxy.Instance; 
     string network = string.Empty; 
     network = myprox .GetNetworkConfig(); 
     return network; 
    } 

nun eine weitere Klasse ich habe redet, wo ich Objekt der Klasse Netzwerk erstellen und rufen GetMyNetwork() Netzwerk zu erhalten. Wenn ich dies tue, trifft es wieder auf wcf und gibt mir die Saite. Ich will das vermeiden. Ich will, dass es die Netzwerkzeichenfolge ein für alle Mal zwischenspeichert, und wenn ich diese Methode erlebe, sollte ich die Daten bekommen, ohne die WPF erneut zu treffen. Wie kann ich das erreichen?

+3

Sie Cache, statische Variable verwenden können, speichern Sie die Datei auf den db, speichern etc. –

+2

Ein Wort: Singleton –

+0

Objectcache cache = MemoryCache.Default; if (cache.Contains (Netzwerk)) return (IEnumerable) cache.Get (Netzwerk); – MMK

Antwort

1
public class Network 
{ 
    private const string PROXY_HOSTNAME_PARAM = "ProxyHostname";  
    private string network = String.Empty; 
    private Network _instance; 
    public string GetMyNetwork() 
    { 
     if (String.IsNullOrWhiteSpace(network)) 
     { 
      MyProxy myprox = MyProxy.Instance; 
      network = myprox .GetNetworkConfig(); 
     } 
     return network; 
    } 
    private Network() { } 
    public Network Instance 
    { 
     get 
     { 
      if (this._instance == null) 
      { 
       this._instance = new Network(); 
      } 
      return this._instance; 
     } 
    }  
} 

Stellen Sie sicher, nur eine Instanz von Network Klasse zu halten. Jedes Mal, wenn Sie eine neue Instanz der Klasse Network erstellen, ist die interne Netzwerkvariable eine leere Zeichenfolge. Daher ruft die Methode GetMyNetwork den WCF-Dienst erneut auf.

+0

hat nicht geholfen, wenn ich ein Objekt dieser Klasse erstellen und rufen Sie meine Methode es schlägt wieder wcf – pankaj

+0

@sameer Immer wenn Sie die Methode auf eine neue Instanz dieser Klasse aufrufen, wird es die WCF treffen. Sie sollten eine einzelne Instanz dieser Klasse in der gesamten Client-Anwendung verwalten, z. Sie könnten eine statische Variable erstellen oder die Netzwerkklasse als Singleton definieren. – Rocker1985

+0

@sameer Ich habe diese Klasse Singleton gemacht. Versuchen Sie, die Methode wie Network.Instance.GetMyNetwork() aufzurufen; Dies sollte dein Problem lösen. – Rocker1985

1

Sie müssen festlegen Klasse und Funktion (oder Eigenschaft) statisch

public static MyClass 
{ 
    public static string MyFunc() 
    { 
     return "hello"; 
    } 
} 

Nutzung

string myString = MyClass.MyFunc(); 
1

Sie können Singleton von Ihrem Network Klasse machen:

public class Network 
{ 
    static Network _instance; 

    public static Network Instance 
    { 
     get { return _instance ?? (_instance = new Network()); } 
    } 

    string _networkString; 

    private Network() { _networkString = string.Empty; } 

    public string GetMyNetwork() 
    { 
     if(string.IsNullOrEmpty(_networkString)) 
      return (_networkString = MyProxy.Instance.GetNetworkConfig()); 

     return _networkString; 
    } 
} 

Jetzt sind Sie Sie können es genauso verwenden, wie Sie Ihr MyProxy Objekt verwenden:

string network = Network.Instance.GetMyNetwork(); 
Verwandte Themen