首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blazor和依赖注入System.objectDisposedException

Blazor和依赖注入System.objectDisposedException
EN

Stack Overflow用户
提问于 2020-10-12 13:05:43
回答 1查看 727关注 0票数 0

我有一个Blazor服务器应用程序。

我使用EF框架和依赖注入。在大多数情况下,它运行良好,没有错误。但是,我正在对计时器进行UI更新,然后抛出一个

System.ObjectDisposedException:“无法访问已释放的对象。导致此错误的一个常见原因是处理通过依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例。如果在上下文上调用Dispose(),或者在using语句中包装上下文,则可能会发生这种情况。如果使用依赖项注入,则应该让依赖项注入容器处理上下文实例。对象名称:'ApplicationDbContext'.‘”

这是代码,在Blazor页面上,它可以很好地处理页面加载,然后大概10/20刷新,然后崩溃。

代码语言:javascript
复制
@code {
    public bool Showmap;

    Machine_Device Device = new Machine_Device();

    [Parameter]
    public string DeviceID { get; set; }

    System.Threading.Timer timer;

    protected override async Task OnInitializedAsync()
    {
        if (DeviceID != null)
        {
            var t = await JsonAction.GetLatest_FullData_MachineDevice(DeviceID);
            Device = t;
        }

        timer =  new System.Threading.Timer(UpdateUI, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
    }

    private async void UpdateUI(object state)
    {
        var t = await JsonAction.GetLatest_FullData_MachineDevice(DeviceID);

        Device = t;
        InvokeAsync(StateHasChanged);
    }

在我的启动中,我已经将AppicationDBcontext设置为瞬态--我对此进行了研究。为了解决此错误,我还将DeviceJsonActions ()设置为瞬态的,而不是限定范围的。

启动

代码语言:javascript
复制
services.AddTransient<ApplicationDbContext>();
services.AddTransient<DeviceJsonActions>(); (defined as JsonAction in BlazorPage)

在DeviceJsonAction类中,定义如下

代码语言:javascript
复制
public class DeviceJsonActions
{

    private readonly ApplicationDbContext _context;
    public ClaimsPrincipal SignedInIdentity { get; set; }

    public DeviceJsonActions(ApplicationDbContext context)
    {
        _context = context;
    }

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 15:18:29

我认为它可能是在组件被释放后执行的计时器。

代码语言:javascript
复制
@implements IDisposable

....

@code {
   ...

  void IDisposable.Dispose()
  {
    if(timer is not null) // C# 9.0
    {
        timer.Dispose();
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64318483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档