繁体   English   中英

C# Asp.net核心依赖注入使用RestSharp

[英]C# Asp.net core Dependency injection using RestSharp

我目前正在使用 RestClient 从网站获取数据。 我希望能够在我的 asp.net 核心项目中使用依赖注入 controller class 当我在调用 controller 并将断点放入 controller 时尝试使用依赖注入时,它不会被命中。 这是因为我没有正确设置客户端依赖注入。

下面是我的客户端 class,它实现了 IClient 接口。

public class Client: IClient
{
    public RestClient RestClient { get; set; }
    public Client()
    {
        RestClient = new RestClient("https://eonet.sci.gsfc.nasa.gov/api/v2.1/");
    }

    public async Task<List<EventDTO>> GetAll()
    {
        var request = new RestRequest("events", Method.GET);
        var content = await RestClient.GetAsync<RootObject>(request);
        return Event;
    }

    public async Task<RootObject> Get(string id)
    {
        var request = new RestRequest("events?source=" + "InciWeb", Method.GET);
        RootObject content = null;
        content = await RestClient.GetAsync<RootObject>(request);
        return content;
    }
}

在启动ConfigureServices 方法中。

  services.AddTransient<IClient, Client>();

在我的 controller 中,我做了以下事情:

private readonly IClient _client;

public EventsController(IClient client)
{
    _client = client;
}

我不确定我是否可以在构造函数中创建客户端的任何实例。 有人可以告诉我我做错了什么。 谢谢

最好的方法是将 IRestClient 注入客户端。 然后创建您的 RestRequest 并使用可注入的 IRestClient 执行

请看下面的例子

     public class Client : IClient
    {
        private readonly IRestClient _restClient;
        public Client(IRestClient restClient)
        {
            _restClient = restClient;
            _restClient.BaseUrl = new Uri("https://eonet.sci.gsfc.nasa.gov/api/v2.1/");
        }

        public async Task<List<EventDTO>> GetAll()
        {
            var request = new RestRequest("events", Method.GET);
            var content = await _restClient.GetAsync<RootObject>(request);
            return content.Event;
        }

        public async Task<RootObject> Get(string id)
        {
            var request = new RestRequest("events?source=" + "InciWeb", Method.GET);
            RootObject content = null;
            content = await _restClient.GetAsync<RootObject>(request);
            return content;
        }
    }

将 IRestClient 注册为 Transient 并将您的客户端注册为 Singleton 到 IServiceCollection 请检查示例 ConfigureServices

  services.AddTransient<IRestClient, RestClient>();
  services.AddSingleton<IClient, Client>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM