我有一个与wcf对话的课程
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;
}
现在我有另一个类,我创建类Network的对象并调用GetMyNetwork()来获取网络。 当我这样做它再次击中wcf并给我字符串。我想要避免这种情况。我希望它一劳永逸地缓存网络字符串,每当我点击这种方法时,我都应该获得数据,而不必再次点击wcf。我怎么能做到这一点?
答案 0 :(得分: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;
}
}
}
确保只维护Network
类的一个实例。每次创建Network
类的新实例时,内部网络变量将是一个空字符串,因此调用GetMyNetwork
方法将再次调用WCF服务。
答案 1 :(得分:1)
您需要设置类和函数(或属性)static
public static MyClass
{
public static string MyFunc()
{
return "hello";
}
}
使用
string myString = MyClass.MyFunc();
答案 2 :(得分:1)
您可以从Network
班级制作单身人士:
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;
}
}
现在,您可以像使用MyProxy
对象一样使用它:
string network = Network.Instance.GetMyNetwork();