A portable event aggregator for pub-sub messaging, using Rx, for .NET 4+, SL5, WP8+ and Windows Store Apps
C# PowerShell
Latest commit 778430a Dec 21, 2016 @shiftkey committed on GitHub Merge pull request #21 from shiftkey/visualstudio-tests
add xUnit VS test runner
Permalink
Failed to load latest commit information.
src
.gitattributes
.gitignore
CONTRIBUTING.md
COPYING
README.md
build.cake
build.ps1

README.md

Reactive.EventAggregator

This is an update of a blog post from José F. Romaniello about using Reactive Extensions to implement an event aggregator. source

Build status

Usage

To install it, just run this from the Package Manager Console:

Install-Package Reactive.EventAggregator

Why bring it back?

Three reasons:

  • I wanted a simple event aggregator, without taking a dependency on an MVVM framework
  • It should be available on NuGet
  • Demonstrate Portable Class Libaries and targetting different platforms from one codebase

Samples

Subscribing to an event

// arrange
var eventWasRaised = false;
var eventPublisher = new EventAggregator();

// act
eventPublisher.GetEvent<SampleEvent>()
              .Subscribe(se => eventWasRaised = true);

eventPublisher.Publish(new SampleEvent());

// assert
eventWasRaised.ShouldBe(true);

Disposing of the event

// arrange
var eventWasRaised = false;
var eventPublisher = new EventAggregator();

// act
var subscription = eventPublisher.GetEvent<SampleEvent>()
                                 .Subscribe(se => eventWasRaised = true);

subscription.Dispose();
eventPublisher.Publish(new SampleEvent());

// assert
eventWasRaised.ShouldBe(false);

Selectively subscribing to an event

// arrange
var eventWasRaised = false;
var eventPublisher = new EventAggregator();

// act
eventPublisher.GetEvent<SampleEvent>()
              .Where(se => se.Status == 1)
              .Subscribe(se => eventWasRaised = true);

eventPublisher.Publish(new SampleEvent { Status = 1 });

// assert
eventWasRaised.ShouldBe(true);