Blazor 中的子组件未调用 Dispose

问题描述 投票:0回答:1

我有一个实现

IDisposable
的父组件,其中有一个名为
MyGrid
的子组件。现在
MyGrid
扩展了 Syncfusion 的
SfGrid
,它本身实现了
IDisposable
。当我关闭父组件时,会调用其
Dispose
方法,但不会调用
Dispose
内的
MyGrid
。正常吗?我认为 Dispose 具有连锁效应。我应该在
MyGrid
上显式调用 Dispose(在获得对其的引用后)吗?

家长剃刀:

<MyGrid ... />

MyGrid.cs:

public class MyGrid<T> : SfGrid<T>
{
    ...

    public override async void Dispose()
    {
       await PersistDataAsync();
    }
}
c# blazor dispose syncfusion idisposable
1个回答
0
投票

我认为你需要使用

DisposeAsync
。它是在 dotnet8 中引入的。使用它可能有点棘手:

  • 如果你的
    MyGrid
    是一个密封组件(你不需要编写继承自
    MyGrid
    的其他组件),任务很简单:
public sealed class MyGrid<T> : SfGrid<T>, IAsyncDisposable
{
...
    public ValueTask DisposeAsync() => PersistDataAsync();
}
  • 如果您的
    MyGrid
    不是密封类,那么实现它会有些复杂。

我强烈建议您阅读实现 DisposeAsync 方法

附注我完全同意亨克的观点。在 Dispose 中保留数据不被视为最佳实践。这样做时要小心。

© www.soinside.com 2019 - 2024. All rights reserved.