<PackageReference Include="Castle.Windsor" Version="2.5.4" />

EventWiringDescriptor<T>

using Castle.Core.Configuration; using Castle.MicroKernel; using Castle.MicroKernel.Registration; using System.Collections.Generic; namespace Castle.Facilities.EventWiring { public class EventWiringDescriptor<T> : ComponentDescriptor<T> { private readonly string eventName; private readonly EventSubscriber[] subscribers; protected internal override void ApplyToConfiguration(IKernel kernel, IConfiguration configuration) { IConfiguration subscribersNode = GetSubscribersNode(configuration); EventSubscriber[] array = subscribers; foreach (EventSubscriber eventSubscriber in array) { CompoundChild compoundChild = Child.ForName("subscriber").Eq(Attrib.ForName("id").Eq(eventSubscriber.SubscriberComponentName), Attrib.ForName("event").Eq(eventName), Attrib.ForName("handler").Eq(EventHandlerMethodName(eventSubscriber))); compoundChild.ApplyTo(subscribersNode); } } private string EventHandlerMethodName(EventSubscriber eventSubscriber) { return eventSubscriber.EventHandler ?? ("On" + eventName); } private IConfiguration GetSubscribersNode(IConfiguration configuration) { IConfiguration val = configuration.get_Children().get_Item("subscribers"); if (val == null) { val = new MutableConfiguration("subscribers"); ((List<IConfiguration>)configuration.get_Children()).Add(val); } return val; } public EventWiringDescriptor(string eventName, EventSubscriber[] subscribers) { this.eventName = eventName; this.subscribers = subscribers; } } }