.NET Community Toolkit Messaging - Registering with Blazor Server

Viewed 23

I am experimenting with the .NET Community Toolkit IMessenger interface in a Blazor Server application.

It appears a singleton service is utilized which is not ideal as the messages are shared across all connected sessions. This causes the behavior shown in the gif below. The count in the sidebar is incrementing across all browser tabs/sessions.

Is it possible to use the WeakReferenceMessenger and/or the StrongReferenceMessenger in a Blazor Server application registered with a transient service lifetime?

Sender

private void IncrementCount()
{
    currentCount++;
    WeakReferenceMessenger.Default.Send(new IncrementCountMessage(currentCount));
}

Receiver

using CommunityToolkit.Mvvm.Messaging;
using Microsoft.AspNetCore.Components;

namespace BlazorServerSandbox;

public partial class Receiver : ComponentBase, IRecipient<IncrementCountMessage>
{
    public int CurrentCount { get; set; } = 0;

    public Receiver()
    {
        WeakReferenceMessenger.Default.Register(this);
    }

    public void Receive(IncrementCountMessage message)
    {
        CurrentCount = message.Value;
        InvokeAsync(() => StateHasChanged());
    }
}

enter image description here

0 Answers
Related