| File: Infrastructure\EventCallbackSubscriber.cs | Web Access |
| Project: src\aspnetcore\src\Components\QuickGrid\Microsoft.AspNetCore.Components.QuickGrid\src\Microsoft.AspNetCore.Components.QuickGrid.csproj (Microsoft.AspNetCore.Components.QuickGrid) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.AspNetCore.Components.QuickGrid.Infrastructure; /// <summary> /// Represents a subscriber that may be subscribe to an <see cref="EventCallbackSubscribable{T}"/>. /// The subscription can move between <see cref="EventCallbackSubscribable{T}"/> instances over time, /// and automatically unsubscribes from earlier <see cref="EventCallbackSubscribable{T}"/> instances /// whenever it moves to a new one. /// </summary> internal sealed class EventCallbackSubscriber<T> : IDisposable { private readonly EventCallback<T> _handler; private EventCallbackSubscribable<T>? _existingSubscription; public EventCallbackSubscriber(EventCallback<T> handler) { _handler = handler; } /// <summary> /// Creates a subscription on the <paramref name="subscribable"/>, or moves any existing subscription to it /// by first unsubscribing from the previous <see cref="EventCallbackSubscribable{T}"/>. /// /// If the supplied <paramref name="subscribable"/> is null, no new subscription will be created, but any /// existing one will still be unsubscribed. /// </summary> /// <param name="subscribable"></param> public void SubscribeOrMove(EventCallbackSubscribable<T>? subscribable) { if (subscribable != _existingSubscription) { _existingSubscription?.Unsubscribe(this); subscribable?.Subscribe(this, _handler); _existingSubscription = subscribable; } } public void Dispose() { _existingSubscription?.Unsubscribe(this); } }