C# Castle Windsor-eventhandler的注册组件

C# Castle Windsor-eventhandler的注册组件,c#,asp.net,events,dependency-injection,castle-windsor,C#,Asp.net,Events,Dependency Injection,Castle Windsor,我是国际奥委会的新手,尤其是温莎城堡。我正在尝试为eventpublisher注册组件,如下所示: container.Register(Component.For<IEventPublisher>().ImplementedBy<EventPublisher>()); EventPublisher.cs public class EventPublisher : IEventPublisher { private readonly IEnume

我是国际奥委会的新手,尤其是温莎城堡。我正在尝试为eventpublisher注册组件,如下所示:

  container.Register(Component.For<IEventPublisher>().ImplementedBy<EventPublisher>());
EventPublisher.cs

  public class EventPublisher : IEventPublisher
    {

   private readonly IEnumerable<IEventListener> _listeners;

   public EventPublisher(IEnumerable<IEventListener> listeners)
    {
        _listeners = listeners;
    }

    public void Publish<TPayload>(TPayload payload) where TPayload : class
    {
        var handlersForPayload = _listeners.OfType<IEventListener<TPayload();
        foreach (var handler in handlersForPayload)
        {
            handler.Handle(payload);
        }
    }
}
公共类事件发布者:IEventPublisher
{
私有只读IEnumerable监听器;
public EventPublisher(IEnumerable侦听器)
{
_监听器=监听器;
}
公共无效发布(TPayload有效负载),其中TPayload:class
{

var handlersForPayload=_侦听器。在类型中,您需要将CollectionResolver添加到容器中,然后注册侦听器

container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
有关解析程序的详细信息,请单击此处:


Windsor告诉您,它无法解决创建
EventPublisher
public interface IEventListener
 {}

public interface IEventListener<in TPayload> : IEventListener where TPayload : class
{

    void Handle(TPayload payload);
}
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));