I have just implemented a State Container like this and ran into the same error – but my service needs to be a singleton.
So I found an example on the aspnetcore git that does exactly what the error message says to do.
Call InvokeAsync — not from your state container but when you try to change the state of your razor component.
So your state container doesn’t need to change, just your component event handler does.
@code{
protected override void OnInitialized()
{
_YourService.OnChange += OnMyChangeHandler;
}
public void Dispose()
{
_YourService.OnChange -= OnMyChangeHandler;
}
private async void OnMyChangeHandler(object sender, EventArgs e)
{
// InvokeAsync is inherited, it syncs the call back to the render thread
await InvokeAsync(() => {
DoStuff();
StateHasChanged();
});
}
}
Now your service (if it’s a singleton) can notify ALL your users at once! Think about all hoops we had to jump through in past to do this.