A decoupled messaging system for c# that allows the definition of custom messages and the sending of dynamic data inside of an application
- Create an implementation of AbstractMessageConfig (remembering to generically pass your concrete class type to AbstractMessageConfig) and define your message type constants.
public class AppMessageConfig : AbstractMessageConfig<AppMessageConfig>
{
// messages
public static readonly string MESSAGE_ONE = "message_one";
public static readonly string MESSAGE_TWO = "message_two";
}
- Create an instance of MessageManager.
List<IMessage> messages = AppMessageConfig.GetMessages();
MessageManager messageManager = new MessageManager(messages);
- Create classes that extend AbstractMessenger and pass it the instance of the message manager.
public class SomeController : AbstractMessenger
{
public SomeController(MessageManager messageManager) : base(messageManager)
{
//Do stuff
}
}
public class SomeOtherController : AbstractMessenger
{
public SomeOtherController(MessageManager messageManager) : base(messageManager)
{
//Do other stuff
}
}
- Subscribe or Unsubscribe from a message (must be done in a class that extends AbstractMessenger)
Subscribe(AppMessageConfig.MESSAGE_ONE, callback);
Unsubscribe(AppMessageConfig.MESSAGE_ONE, callback);
Callbacks must follow the signature:
void callback(object data);
Data can be null and must be cast in the handler to the specific type you sent.
- Send a message from that class
SendMessage(AppMessageConfig.MESSAGE_ONE); //With no data
int optionalData = 15;
SendMessage(AppMessageConfig.MESSAGE_ONE, optionalData); //With some data
The MIT License (MIT). Please see License File for more information.