thank you. I'll research that this morning.

On Oct 4, 6:24 pm, Krzysztof Koźmic <[email protected]>
wrote:
> Looks good although custom Activator swapped under the covers feels too
> intrusive. I'd use lifestyle concerns instead.
>
> sent from my HTC Desire
>
> On 05/10/2010 6:07 AM, "Jason Meckley" <[email protected]> wrote:
>
> I'm spiking a sample of an event broker where listeners are
> (un)registered to the broker during resolution/destruction. the code
> below appears to be working, but I wanted to double check with the
> community to make sure I'm not missing something obvious (or not so
> obvious).
>
> public class EventBrokerFacility
>        : AbstractFacility
> {
>        protected override void Init()
>        {
>                Kernel.ComponentModelBuilder.AddContributor(new
> EventBrokerContributor());
>                Kernel.Register(Component
>
>  .For<SynchronizationContext>()
>
>  .ImplementedBy<WindowsFormsSynchronizationContext>()
>                                                        .LifeStyle.Singleton,
>                                                Component
>                                                        .For<IEventPublisher,
> IEventRegister>()
>
>  .ImplementedBy<EventBroker>()
>
>  .LifeStyle.Singleton);
>        }}
>
> public class EventBrokerContributor
>        : IContributeComponentModelConstruction
> {
>        private readonly Type activator = typeof
> (EventBrokerComponentActivator);
>        private readonly Type listener = typeof (IListener<>);
>
>        public void ProcessModel(IKernel kernel, ComponentModel model)
>        {
>                var isAListener = model
>                        .Implementation
>                        .GetInterfaces()
>                        .Where(i => i.IsGenericType)
>                        .Select(i => i.GetGenericTypeDefinition())
>                        .Any(i => i == listener);
>
>                if (isAListener == false) return;
>                model.CustomComponentActivator = activator;
>        }}
>
> public class EventBrokerComponentActivator
>        : DefaultComponentActivator
> {
>        private IEventRegister Broker
>        {
>                get { return Kernel.Resolve<IEventRegister>(); }
>        }
>
>        public EventBrokerComponentActivator(
>                ComponentModel model,
>                IKernel kernel,
>                ComponentInstanceDelegate onCreation,
>                ComponentInstanceDelegate onDestruction)
>                : base(model, kernel, onCreation, onDestruction)
>        {
>        }
>
>        public override object Create(CreationContext context)
>        {
>                var component = base.Create(context);
>                Broker.Register(component);
>                return component;
>        }
>
>        public override void Destroy(object instance)
>        {
>                Broker.Unregister(instance);
>                base.Destroy(instance);
>        }
>
> }
>
> as an example this class will use the EventBrokerComponentActivator
> class Presenter : IListener<Foo>,IListener<Bar>
> {
>
> }
>
> while this class uses the default.
> class Service
> {
>
> }
>
> --
> You received this message because you are subscribed to the Google Groups
> "Castle Project Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<castle-project-users%[email protected]>
> .
> For more options, visit this group 
> athttp://groups.google.com/group/castle-project-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en.

Reply via email to