如何解决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 举报,一经查实,本站将立刻删除。