Я искал легкий агрегатор событий для .Net и наткнулся на TinyMessenger (https://github.com/grumpydev/TinyMessenger/wiki). Кажется, он выполняет ту работу, которую я хочу, но я не могу понять, как использовать его с контейнером DI, например, Structuremap, который я собираюсь использовать.
Вот мой простой тестовый код
class Program
{
static void Main(string[] args)
{
var messageHub = new TinyMessengerHub();
var salesMadeHandler = new SalesMadeHandler(messageHub);
messageHub.Publish(new SaleMadeEvent() {Id = Guid.NewGuid(), Total = 100});
Console.ReadKey();
}
}
class SalesMadeHandler
{
private readonly ITinyMessengerHub _messengerHub;
public SalesMadeHandler(ITinyMessengerHub messengerHub)
{
_messengerHub = messengerHub;
_messengerHub.Subscribe<SaleMadeEvent>(Handle);
}
public void Handle(SaleMadeEvent message)
{
Console.WriteLine("Message Recieved with ID: " + message.Id);
}
}
как вы можете видеть в приведенном выше коде, у меня есть класс SalesMadeHandler, который подписывается на событие в своем конструкторе. Я понимаю, что я должен иметь возможность пометить этот класс интерфейсом, и контейнер DI должен автоматически создать его экземпляр и использовать его для обработки сообщений. Однако в этом случае я должен иметь уже созданный экземпляр перед публикацией сообщения из-за механизма подписки.
Я думаю, что мне не хватает ключевого момента здесь с агрегатами событий, не могли бы вы посоветовать, что мне не хватает?