Blazor Server Singleton Observer Pattern Удерживает ссылки после обновления страницыC#

Место общения программистов C#
Ответить
Anonymous
 Blazor Server Singleton Observer Pattern Удерживает ссылки после обновления страницы

Сообщение Anonymous »

Я использую Singleton Service в приложении Blazor Server, чтобы уведомлять компоненты при изменении заказа. Служба следует за шаблоном наблюдателя, где обработчики событий регистрируются страницы, которые запускаются, когда происходит обновление. < /P>
public class OrderOnChangeService : IOrderOnChangeService
{
public event Action? OnOrderRowChanged;

public void NotifyOrderRowChanged(List orderIds, Guid changeId)
{
OnOrderRowChanged?.Invoke(orderIds, changeId);
}

public int GetObserverCount()
{
return OnOrderRowChanged?.GetInvocationList().Length ?? 0;
}
}
< /code>
В моем компоненте Blazor (.razor.cs) я регистрирую метод с помощью этой службы: < /p>
protected override async Task OnInitializedAsync()
{
OrderOnChangeService.OnOrderRowChanged += HandleRowChanged;
Console.WriteLine($"Registered: {OrderOnChangeService.GetObserverCount()} observers");
}

public void Dispose()
{
OrderOnChangeService.OnOrderRowChanged -= HandleRowChanged;
Console.WriteLine($"Disposed: {OrderOnChangeService.GetObserverCount()} observers");
}

private void HandleRowChanged(List orderIds, Guid changeId)
{
// Handle updates
}
< /code>
Когда я обновляю страницу, схема Blazor прекращается, но, поскольку OrderOnchangeService является синглтоном, она все еще содержит ссылки на обработчики из экземпляра утилизации страницы. Похоже, это вызывает утечку памяти, потому что ссылки на событие никогда не удаляются, если только метод утилизации не называется явно. так что служба синглтона не сохраняет устаревшие ссылки?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ge-refresh
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»