[英]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.