Autofac-注册所有派生的接口及其实现

问题描述

这是我要注册的接口的结构:

body {
    background-image: url("./images/cocktail-main-bg.jpg");
    height: 100vh;
    width: 100vw;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;

    @include breakpoint("xs") {
        background-position-x: 80%;
    }
}

因此,此注册有多个问题,因为唯一实现“ IEventHandler”的是另一个接口,但是我要做的是确保基于通用IEventHandler 接口,所有类都已注册,因此最终,EventPublisher注入了所有这些接口,而无需进行任何其他工作。但是我无法正常工作。我已经尝试过此注册:

public interface IEventHandler
{
}

public interface IEventHandler<TEvent> : IEventHandler where TEvent : IEvent
{
    void Handle(TEvent @event);
}

public class OnTrackPlayFoundWriteToDebug : IEventHandler<TrackPlayFoundEvent>
{
    public void Handle(TrackPlayFoundEvent @event)
    {
        Debug.WriteLine($"Track found! It's from {@event.TrackPlay.Track.Artist.Name} called {@event.TrackPlay.Track.Name}");
    }
}

public interface IEventPublisher
{
    public void Publish<TEvent>(TEvent @event) where TEvent: IEvent;
}

public class EventPublisher : IEventPublisher
{
    private readonly IEnumerable<IEventHandler> _eventHandlers;

    public EventPublisher(IEnumerable<IEventHandler> eventHandlers)
    {
        _eventHandlers = eventHandlers;
    }

    public void Publish<TEvent>(TEvent @event) where TEvent : IEvent
    {
        var eventHandlersForEvent = _eventHandlers.OfType<IEventHandler<TEvent>>();

        foreach (var eventHandler in eventHandlersForEvent)
        {
            eventHandler.Handle(@event);
        }
    }
}

这在我运行时不会失败,但是EventPublisher中的_eventHandlers字段保持为空。如何正确注册它才能起作用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...