RolandKoenig / RolandK.InProcessMessaging

A messenger implementation which sends / receives in process messages. It is able to communicate between different areas of your application like threads, agents, etc.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RolandK.InProcessMessaging

A messenger implementation which sends / receives in process messages. It is able to communicate between different areas of your application like threads, agents, etc.

Feature overview

Build

Continuous integration

Nuget

Package Link
RolandK.InProcessMessaging https://www.nuget.org/packages/RolandK.InProcessMessaging

Samples

Messenger implementation for sending / receiving messages

Messages can be defined as class, struct or record. They are marked with an InProcessMessage attribute.

[InProcessMessage]
private record DummyMessage;

Given we've created an InProcessMessenger before, we can easily subscribe to messages. The subscription gets called each time the message gets published. You can unsubscribe later by calling Dispose or Unsubscribe on the MessageSubscription object.

var messenger = new InProcessMessenger();

//...

var subscription = messenger.Subscribe<DummyMessage>(dummyMessage => 
{
    // Logic
});

Now we can publish a message to notify all subscribers of that message type.

messenger.Publish(new DummyMessage());

`

Waiting for specific messages

You can wait for specific messages using the WaitForMessageAsync method. This method subscribes to the specified message types. It returns the first message it receives and unsubscribes after that.

var dummyMessage = await messenger.WaitForMessageAsync<DummyMessage>(CancellationToken.None);

Separated interfaces for publish and subscribe

You are free to use the InProcessMessenger class in your project and on all places you need to send / receive messages. Especially for environments with dependency injection it would be better to use the interfaces IInProcessMessagePublisher and IInProcessMessageSubscriber. InProcessMessenger implements both of them. Using these interfaces you can express in your logic classes, that you only publish messages or only subscribe to messages.

About

A messenger implementation which sends / receives in process messages. It is able to communicate between different areas of your application like threads, agents, etc.

License:MIT License


Languages

Language:C# 99.0%Language:PowerShell 1.0%