如何重新使用这个基于ASP.NET和C#中的最终RestSharp客户端的API客户端?

如何重新使用这个基于ASP.NET和C#中的最终RestSharp客户端的API客户端?,c#,restsharp,C#,Restsharp,我是一名新的C#开发人员,我正在尝试重新使用基于ASP.NET和C#中的终极RestSharp客户端构建的API客户端。我能够创建文章中提到的所有类和先决条件,但是我现在无法在应用程序的某些地方使用客户机类 以下是客户端代码: public class UsersClient : BaseClient { public UsersClient (ICacheService cache, IDeserializer serializer, IErrorLogger errorLogger)

我是一名新的C#开发人员,我正在尝试重新使用基于ASP.NET和C#中的终极RestSharp客户端构建的API客户端。我能够创建文章中提到的所有类和先决条件,但是我现在无法在应用程序的某些地方使用客户机类

以下是客户端代码:

public class UsersClient : BaseClient
{
    public UsersClient (ICacheService cache, IDeserializer serializer, IErrorLogger errorLogger)
        : base(cache, serializer, errorLogger, "http://yourBaseUrl.com") { }

    public User GetByID(int id)
    {
        RestRequest request = new RestRequest("users/{id}", Method.GET);
        request.AddUrlSegment("id", id.ToString());
        return GetFromCache<User>(request, "User" + id.ToString());
    }

}
那么我如何访问这个方法呢?或者如何在应用程序上使用API客户端

更新:


我仍然在为这个API客户端而挣扎。您能告诉我如何使用它以及如何应用依赖注入吗?

您不能访问这样的非静态方法。首先,必须初始化UsersClient对象

ICacheService cache = //initialize cache here
IDeserializer deserializer = //initialize deserializer here
IErrorLogger errorLogger = //initialize errorLogger here
UsersClient usersClient = new UsersClient(cache, deserializer, errorLogger); 

string userId = "JohnA"; 
var user = usersClient.GetById(userId);

我建议学习一些设计模式,如依赖注入和控制反转(已经使用过,不确定是有意还是无意),并在这种情况下使用它们。

如果您希望通过静态引用访问此方法。您必须进行以下调整。(将单词static添加到GetByID方法中)

公共类用户客户端:BaseClient
{
公共用户客户端(ICacheService缓存、IDeserializer序列化程序、IErrorLogger errorLogger)
:base(缓存、序列化程序、错误记录器,“http://yourBaseUrl.com") { }
公共静态用户GetByID(int-id)
{
RestRequest请求=新的RestRequest(“users/{id}”,Method.GET);
request.AddUrlSegment(“id”,id.ToString());
返回GetFromCache(请求“User”+id.ToString());
}
}

为什么要尝试访问GetById()方法,就好像它是静态的一样?您必须创建一个UsersClientobject@AnthonyLiriano,正如我在问题中提到的,我正在尝试访问此方法,因为我希望在我的应用程序中的不同位置使用它。使用它的最佳实践是什么?感谢您在这方面的帮助。你能给我解释一下使用这种方法的最佳方法吗?如何使用依赖注入和控制反转?@JohnNate通常我提供给你的解决方案是正确的,你应该使用它。无论如何,以一种非常简单的方式,您可以用两种不同的方式调用方法,这取决于您的方法是否是静态的。例如:若方法是静态的,那个么可以像在问题var user=UsersClient.GetById(userId)中一样调用它;若方法是非静态的(在方法定义中并没有“static”关键字),你们必须从中初始化类对象,你们想调用这个方法UsersClient UsersClient=newusersclient(…);var user=usersClient.GetById(userId)@JohnNate关于依赖注入和控制反转你会在网上找到很多教程。非常感谢你的帮助。我仍然对如何初始化
ICacheService
IDeserializer
等的实例感到困惑。当我将它们定义为
ICacheService cache=new ICacheService()时,我遇到了错误。你能告诉我怎么做吗?
ICacheService cache = //initialize cache here
IDeserializer deserializer = //initialize deserializer here
IErrorLogger errorLogger = //initialize errorLogger here
UsersClient usersClient = new UsersClient(cache, deserializer, errorLogger); 

string userId = "JohnA"; 
var user = usersClient.GetById(userId);
public class UsersClient : BaseClient
{
    public UsersClient (ICacheService cache, IDeserializer serializer, IErrorLogger errorLogger)
        : base(cache, serializer, errorLogger, "http://yourBaseUrl.com") { }

    public static User GetByID(int id)
    {
        RestRequest request = new RestRequest("users/{id}", Method.GET);
        request.AddUrlSegment("id", id.ToString());
        return GetFromCache<User>(request, "User" + id.ToString());
    }

}