我使用SocketIOClientDotNet从流中获取数据(https://github.com/Quobject/SocketIoClientDotNet),然后我想将这些数据保存到数据库中;
private readonly DataContext _context;
public SocketIo(DataContext context)
{
this._context = context;
}
public void SocketStart()
{
var socket = IO.Socket("myip");
socket.On("xx", async (data) =>
{
var test = await Update(data.ToString());
});
}
public async Task<SocketPrice> Update(string data)
{
SocketPrice socketStream = JsonConvert.DeserializeObject<SocketPrice>(data);
SocketPrice socketDB = await _context.SocketPrices.Where(s => s.Id == socketStream.Id).FirstOrDefaultAsync();
socketDB.value = socketStream.value;
await _context.SaveChangesAsync();
return socketDB;
}
从启动时运行此操作;
在配置服务中; services.AddScoped<ISocketIoService, SocketIo>();
并在配置; socket.SocketStart();
我收到错误消息;
未处理的异常:System.ObjectDisposedException:无法访问 处置对象。此错误的常见原因是处理上下文 这是从依赖注入解决,然后尝试 在应用程序的其他位置使用相同的上下文实例这可能 如果您在con文本上调用Dispose()或包装 using语句中的上下文。如果您正在使用依赖注入, 你应该让依赖注入容器处理掉 ng上下文实例。
将方法更改为同步时,该方法会运行但会在完成之前重新启动,因此结果不会保存到数据库中。如何更改此设置以将新传入数据保存到数据库?
答案 0 :(得分:0)
注入IServiceProvider
。在需要时解析DataContext
。