gpt4 book ai didi

c# - 寻找设计模式来自动执行重复任务,例如登录/注销

转载 作者:行者123 更新时间:2023-11-30 20:14:56 24 4
gpt4 key购买 nike

我正在寻找一种设计模式来帮助简化我的代码。

我的代码使用 HttpClient 调用获取或发布信息的 Web API,但每个 session 都需要先进行登录调用,其中将 cookie 作为 ID 返回,最后进行注销调用以关闭连接。所以我的 Web API 类如下所示:

public class APIHelper 
{
public HttpClient myClient { get; set; }

public async void Login()
{
using (HttpResponseMessage response = await myClient.PostAsync("loginAddress", "loginInput"))
{
if (response.IsSuccessStatusCode)
{
//save cookie
}
}
}

public async void Logout()
{
using (HttpResponseMessage response = await myClient.PostAsync("logoutAddress", ""))
{
if (response.IsSuccessStatusCode)
{
//session ends
}
}
}

public void GetOrder() {...}

public void NewOrder(object OrderData) {...}

public void GetCustomer() {...}

public void NewCustomer(object CustomerData) {...}
}

要使用它们,我只需按顺序调用它们:

public Main()
{
APIHelper.Login();
APIHelper.GetOrder(); //or NewOrder, or GetCustomer, or any other actual API calls
APIHelper.Logout();
}

我是否可以在每个实际的 API 调用中放置登录/注销调用,这样我就不必为每次调用都键入它们?理想情况下,我只需设置一次结构,然后对于我创建的任何 API 调用,系统将在开始/结束时自动调用登录/注销。哪种设计模式解决了这类问题?任何简单的例子都会非常有帮助!

谢谢。 SC

=====================================

编辑:尝试 Dymanoid 的建议

感谢您的快速回复!我认为它应该有效,但我遇到了另一个问题:“非静态字段、方法或属性‘APIHelper.GetOrder()’需要对象引用

查看新代码,似乎我需要 myClient 对象(它是一个 HttpClient 对象)贯穿整个 session :

public void DoMyJob(Action job)
{
var myClient = new APIHelper(); //initiates a HttpClient object

myClient.Login();
try
{
job();
}
finally
{
myClient.Logout();
}
}

但是从外部调用作业函数时:

DoMyJob(APIHelper.GetOrder);

我还没有对象。这容易解决吗?抱歉,我没有在 OP 中说清楚,我实际的原始通话如下所示:

var myClient = new APIHelper();
myClient.Login();
myClient.GetOrder();
myClient.Logout();

但是感谢您的建议,我认为将初始化放在 DoMyJob 方法中会更好。

最佳答案

为此使用模板方法+策​​略。

void DoMyJob(Action job)
{
APIHelper.Login();
try
{
job();
}
finally
{
APIHelper.Logout();
}
}

用法看起来像这样:

DoMyJob(() => APIHelper.GetOrder()); 

DoMyJob(APIHelper.GetOrder); 

DoMyJob(() => { APIHelper.GetOrder(); APIHelper.NewOrder(); } ); 

关于c# - 寻找设计模式来自动执行重复任务,例如登录/注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com