public static IDomainEvent Deserialize(this ResolvedEvent resolvedEvent) { var dataType = EventTypeMap.GetType(resolvedEvent.Event.EventType); var data = JsonSerializer.Deserialize(resolvedEvent.Event.Data.Span, dataType) ?? throw new Exception($"Unable to read event of type {dataType?.FullName}"); return((IDomainEvent)data); }
private static void RegisterEventTypeNameMappings() { var domainEventTypes = typeof(IDomainEvent).Assembly.GetTypesThatImplementsInterface <IDomainEvent>(); foreach (var domainEventType in domainEventTypes) { var parentClassName = domainEventType?.DeclaringType?.Name ?? throw new Exception($"Declaring type is not defined for type {domainEventType?.FullName}"); if (!_versionRegex.IsMatch(parentClassName)) { parentClassName = ""; } var suffix = string.IsNullOrWhiteSpace(parentClassName) ? "" : $"-{parentClassName}"; EventTypeMap.AddType(domainEventType, $"{domainEventType.Name}{suffix}"); } }