public static void RegisterAssembly(Assembly assembly) { AssertUtil.ArgumentNotNull(assembly, nameof(assembly)); if (loadedAssemblies.Contains(assembly)) { return; } loadedAssemblies.Add(assembly); var interfaceType = typeof(IEventHandler); foreach (Type handlerType in assembly.GetTypes()) { if (!interfaceType.IsAssignableFrom(handlerType)) { continue; } var attrs = handlerType.GetCustomAttributes(typeof(EventNameAttribute), false); if (attrs == null || attrs.Length == 0) { continue; } var wrappedHandler = new WrappedHandler(handlerType); var eventNameAttr = attrs[0] as EventNameAttribute; foreach (string eventName in eventNameAttr.EventNames) { EventCore.RegisterHandler(eventName, wrappedHandler); } } }
public static void RegisterHandler(string eventName, WrappedHandler handler) { if (!HandlersByEvent.ContainsKey(eventName)) { HandlersByEvent[eventName] = new List <WrappedHandler>(); } HandlersByEvent[eventName].Add(handler); Log.Debug($"Register handler '{handler.Type}' for event '{eventName}'."); }