【发布时间】:2019-07-02 17:05:34
【问题描述】:
所以我有一个用 .NET Core C# 编写的网站,我想在后台运行一个进程,该进程将对其他网站进行 API 调用并将数据保存在数据库中。
我已经创建了 ApiAccessor 类并想从控制器调用该方法(它使用依赖注入来连接它的数据库),但是如果我将它们传递给 ApiAccessor(它将是异步的),则连接已经被处理掉了。我已经尝试从一开始就注入它,但它仍然会说接口已被释放,当它完成时。我只能等待它,但这会导致用户等待太久。我应该采取什么方法呢?我是 DI 的新手。也许一些单例类?我仍然不知道如何将依赖注入传递给单例
ApiAccessor:
IUserAccount _userAccounts;
public ApiAccessor(IConfiguration configuration, IUserAccount userAccounts)
{
_configuration = configuration;
_userAccounts = userAccounts;
}
//...
MethodToPollApi(){
var newUserIdToAdd = // just some kind of new data from api
_userAccounts.Add(newUserIdToAdd) // accessing DB, that causes errors
}
控制器:
void Index(){
MethodToPollApi();
return View();
}
【问题讨论】:
-
阅读
IHostedService接口docs.microsoft.com/en-us/aspnet/core/fundamentals/host/… -
控制器的目的是提供对请求的响应。一旦它做出响应,它的工作就完成了。从控制器方法运行它没有意义。如果
Index被访问 100 次怎么办?您将有 100 个进程轮询 API。 -
我不认为你需要担心它,它可以检查时间等,我只需要执行一段代码来轮询 API,控制器将控制时间事件。我只需要控制器传递信息,数据库中的轮询+保存将由访问器类执行
标签: c# .net dependency-injection .net-core