Hi Krzysztof,

Using 2.5.2.0.

Regards

Paul

On Jun 15, 9:10 am, Krzysztof Koźmic <[email protected]>
wrote:
> Which version are you using?
>
> On 15/06/2011 5:32 PM, PaulBowman wrote:
>
>
>
>
>
>
>
> > Hi All.
>
> > Can anybody explain why Windsor will not resolve the component.
>
> > using System;
> > using System.Collections.Generic;
> > using Castle.Windsor;
> > using Castle.MicroKernel.Registration;
> > namespace WindsorIOCProblem
> > {
> >      class Program
> >      {
> >          static void Main(string[] args)
> >          {
> >              IWindsorContainer container = new WindsorContainer();
>
> > container.Register(Component.For<IEventHandler<SomethingCreatedEvent>>().Im 
> > plementedBy<CreateSomethingEventHandler>());
>
> >              var publisher = new Publisher(container);
>
> >              // This works
> >              var created = new SomethingCreatedEvent();
> >              publisher.Publish(created);
>
> >              // This does not.
> >              var list = new List<IEvent>() { new
> > SomethingCreatedEvent() };
> >              foreach (var e in list)
> >                  publisher.Publish(e);
>
> >          }
> >      }
>
> >      public interface IEvent { }
>
> >      public class SomethingCreatedEvent : IEvent { }
>
> >      public interface IEventHandler<T>  where T : IEvent
> >      {
> >          void Handle(IEvent @event);
> >      }
>
> >      public class CreateSomethingEventHandler :
> > IEventHandler<SomethingCreatedEvent>
> >      {
> >          void IEventHandler<SomethingCreatedEvent>.Handle(IEvent
> > @event)
> >          {
> >              Console.WriteLine(this.GetType().Name);
> >          }
> >      }
>
> >      public class Publisher
> >      {
> >          public Publisher(IWindsorContainer container)
> >          {
> >              _container = container;
> >          }
>
> >          public void Publish<T>(T @event) where T : IEvent
> >          {
> >              var handler = _container.Resolve<IEventHandler<T>>();
> >              handler.Handle(@event);
> >          }
>
> >          private IWindsorContainer _container;
> >      }
> > }
>
> > In the code example I give (which should run with a reference to
> > Windsor).
> > If I call Publisher.Publish with the explicit type Windsor can resolve
> > the component. However if I use the second method (which is what to
> > do). Windsor will not resolve the component and throws an exception
> > telling me it cannot find a service supporting IEvent. I can
> > understand why Windsor cannot find a service implementing IEvent.
> > My question is how can I Windsor to resolve correctly?
>
> > Thanks
>
> > Paul

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