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;
}
}
}