using System.Collections.Immutable; using System.Reflection; using Femto.Common.Attributes; using MediatR; namespace Femto.Modules.Blog.Contracts; public static class Module { public static IDictionary GetIntegrationEventTypes() { var mapping = new Dictionary(); var types = typeof(Module).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; } }