C#

时间:2018-06-19 06:44:54

标签: c# design-patterns singleton httpconnection

我们希望使用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参数,这些参数可以在创建连接之前提供,并在整个循环中重复使用。

1 个答案:

答案 0 :(得分:1)

你可以使用类似下面的代码。设置凭据时,它会标记要重置的连接。在此之后第一次访问连接时,它将重新创建连接。

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