namespace TheXamlGuy.Framework.Core { public class EventHandler : IEventHandler where TTEvent : class { private readonly IEventBuilderConfiguration configuration; private readonly IDisposer disposer; private readonly IEventAggregator eventAggregator; private readonly IMediator mediator; private readonly IServiceFactory serviceFactory; private readonly IServiceProvider serviceProvider; public EventHandler(IEventBuilderConfiguration configuration, IServiceProvider serviceProvider, IServiceFactory serviceFactory, IEventAggregator eventAggregator, IMediator mediator, IDisposer disposer) { this.configuration = configuration; this.serviceProvider = serviceProvider; this.serviceFactory = serviceFactory; this.eventAggregator = eventAggregator; this.mediator = mediator; this.disposer = disposer; } public void Dispose() { disposer.Dispose(this); GC.SuppressFinalize(this); } public async Task InitializeAsync() { disposer.Add(this, eventAggregator.SubscribeUI(OnEvent)); await Task.CompletedTask; } private void OnEvent(TTEvent args) { foreach (IEventDescriptor? descriptor in configuration.Descriptors) { mediator.Handle((descriptor as dynamic).NextDelegate?.Invoke(args) ?? (descriptor as dynamic).FactoryDelegate?.Invoke(serviceProvider, args)); } } } }