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