Вы можете реализовать что-то вроде этого:
public interface IMessage
{
}
public class PlayerDraw: IMessage
{
public AnyType Arguments { get; set; }
}
public interface IMessageHandler<T> where T: IMessage
{
void Handle(T message);
}
private class MessageHandlers:
IMessageHandler<PlayerDraw>,
IMessageHandler<PlayerHold>
{
public void Handle(PlayerDraw message)
{
// Use your message here;
}
public void Handle(PlayerHold message)
{
// Use your message here;
}
...
}
public class GameManager
{
private readonly Dictionary<Type, Action<IMessage>> _messageRoutes =
new Dictionary<Type, Action<IMessage>>();
public void RegisterHandler<T>(Action<T> handler) where T : IMessage
{ ... }
public void Send<T>(T message) where T : IMessage
{ ... }
}
Теперь вам нужно место для регистрации ваших обработчиков сообщений:
var messages = new MessageHandlers();
GameManager.RegisterHandler<PlayerDraw>(messages.Handle);
GameManager.RegisterHandler<PlayerHold>(messages.Handle);
И использовать ваш механизм таким образом:
GameManager.Send<PlayerDraw>(new PlayerDraw(Arguments))