Weakly referenced event subscribers. Keep your .NET events lean and memory-safe.
$ dotnet add package ByteAether.WeakEventfrom ByteAether
WeakEvent is a lightweight .NET library that implements the weak event pattern using weak references. It ensures that event subscribers don't prevent garbage collection, avoiding memory leaks.
WeakEvent for notifications without data and WeakEvent<TEvent> for events that pass data.Install via NuGet:
dotnet add package ByteAether.WeakEvent
Use the --version option to specify a preview version to install.
WeakEventusing ByteAether.WeakEvent;
// Create an instance of the weak event without event data
var myEvent = new WeakEvent();
// Create a subscriber and subscribe
var subscriber = () => Console.WriteLine("Event received!");
myEvent.Subscribe(subscriber);
// Raise the event
await myEvent.PublishAsync();
WeakEvent<TEvent>using ByteAether.WeakEvent;
// Create an instance of the weak event with event data
var myEvent = new WeakEvent<MyEventData>();
// Create a subscriber and subscribe
var subscriber = (MyEventData data) => Console.WriteLine("Received: " + data.Message);
myEvent.Subscribe(subscriber);
// Raise the event
await myEvent.PublishAsync(new MyEventData("Hello, World!"));
// Define your event data
public record MyEventData(string Message);
WeakEventSubscriberCountSubscribe(Action handler)Subscribe(Func<Task> handler)Subscribe(Func<CancellationToken, Task> handler)Unsubscribe(Action handler)Unsubscribe(Func<Task> handler)Unsubscribe(Func<CancellationToken, Task> handler)PublishAsync(CancellationToken cancellationToken = default)WeakEvent<TEvent>SubscriberCountSubscribe(Action<TEvent> handler)Subscribe(Func<TEvent, Task> handler)Subscribe(Func<TEvent, CancellationToken, Task> handler)Unsubscribe(Action<TEvent> handler)Unsubscribe(Func<TEvent, Task> handler)Unsubscribe(Func<TEvent, CancellationToken, Task> handler)PublishAsync(TEvent eventData, CancellationToken cancellationToken = default)