using System.Reflection; using Femto.Common.Attributes; using MediatR; namespace Femto.Common.Util; public static class EventTypeMapping { public static IDictionary GetEventTypeMapping(Assembly assembly) { var mapping = new Dictionary(); var types = assembly.GetTypes(); foreach (var type in types) { if ( !typeof(INotification).IsAssignableFrom(type) || type.IsAbstract || type.IsInterface ) continue; var attribute = type.GetCustomAttribute(); if (attribute == null) continue; var eventName = attribute.Name; if (!string.IsNullOrWhiteSpace(eventName)) { mapping.TryAdd(eventName, type); } } return mapping; } }