C# 中的单连接模式
Pattern for Single Connection in C#
我们想使用 Http Connection
的单个实例与服务器通信,因为它保证与一端 http 端点通信
例如:
MyConnection.GetRoute<ABC>.DoStuff() --https://user.site.com/abc/
MyConnection.GetRoute<XYZ>.DoStuff() --https://user.site.com/xyz/
从设计模式来看,Singleton似乎是完美的案例
public class MyConnectionHelper
{
private static MyConnection instance;
private MyConnectionHelper() {}
public static MyConnectionHelper Instance
{
get{
if(instance == null){
instance = new MyConnection();
}
return instance;
}
}
}
但是我们需要一些凭据来建立连接和代理信息,如果需要的话,应该公开这些属性
public class MyConnectionHelper
{
public static string authKey;
public static string proxyUrl;
private static MyConnection instance;
private MyConnectionHelper() {}
public static MyConnectionHelper Instance
{
get{
if(instance == null) {
instance = new MyConnection(proxyUrl, authKey);
}
return instance;
}
}
}
是否有更适合此用例的设计模式以及公开 required/optional
参数的更好方法,这些参数可以在创建连接之前提供并在整个循环中重复使用。
您可以使用类似下面的代码。当您设置凭据时,它会标记要重置的连接。当您之后第一次访问连接时,它将重新创建连接。
private static bool resetConnection;
private static string authKey;
private static string proxyUrl;
public static string AuthKey
{
get => authKey;
set
{
authKey = value;
resetConnection = true;
}
}
public static string ProxyUrl
{
get => proxyUrl;
set
{
proxyUrl = value;
resetConnection = true;
}
}
public static MyConnection HelperInstance
{
get
{
if(resetConnection == null)
{
instance = new MyConnection(proxyUrl, authKey);
resetConnection = false;
}
if(instance == null)
{
instance = new MyConnection(proxyUrl, authKey);
resetConnection = false;
}
return instance;
}
}
我们想使用 Http Connection
的单个实例与服务器通信,因为它保证与一端 http 端点通信
例如:
MyConnection.GetRoute<ABC>.DoStuff() --https://user.site.com/abc/
MyConnection.GetRoute<XYZ>.DoStuff() --https://user.site.com/xyz/
从设计模式来看,Singleton似乎是完美的案例
public class MyConnectionHelper
{
private static MyConnection instance;
private MyConnectionHelper() {}
public static MyConnectionHelper Instance
{
get{
if(instance == null){
instance = new MyConnection();
}
return instance;
}
}
}
但是我们需要一些凭据来建立连接和代理信息,如果需要的话,应该公开这些属性
public class MyConnectionHelper
{
public static string authKey;
public static string proxyUrl;
private static MyConnection instance;
private MyConnectionHelper() {}
public static MyConnectionHelper Instance
{
get{
if(instance == null) {
instance = new MyConnection(proxyUrl, authKey);
}
return instance;
}
}
}
是否有更适合此用例的设计模式以及公开 required/optional
参数的更好方法,这些参数可以在创建连接之前提供并在整个循环中重复使用。
您可以使用类似下面的代码。当您设置凭据时,它会标记要重置的连接。当您之后第一次访问连接时,它将重新创建连接。
private static bool resetConnection;
private static string authKey;
private static string proxyUrl;
public static string AuthKey
{
get => authKey;
set
{
authKey = value;
resetConnection = true;
}
}
public static string ProxyUrl
{
get => proxyUrl;
set
{
proxyUrl = value;
resetConnection = true;
}
}
public static MyConnection HelperInstance
{
get
{
if(resetConnection == null)
{
instance = new MyConnection(proxyUrl, authKey);
resetConnection = false;
}
if(instance == null)
{
instance = new MyConnection(proxyUrl, authKey);
resetConnection = false;
}
return instance;
}
}