.NET Core SocketIO - 无法访问已处置的对象

时间:2018-02-06 20:01:57

标签: c# asp.net .net-core asp.net-core-2.0

我使用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上下文实例。

将方法更改为同步时,该方法会运行但会在完成之前重新启动,因此结果不会保存到数据库中。如何更改此设置以将新传入数据保存到数据库?

1 个答案:

答案 0 :(得分:0)

注入IServiceProvider。在需要时解析DataContext