Я создал очень простой издатель событий, и он выглядит так.
public class EventPublisher
{
private readonly IList<Func<IHandle>> _subscribers;
public EventPublisher(IList<Func<IHandle>> subscribers)
{
_subscribers = subscribers;
}
public void Publish<TPayload>(TPayload payload)
where TPayload : class
{
var payloadHandlers = _subscribers.OfType<Func<IHandle<TPayload>>>();
foreach (var payloadHandler in payloadHandlers)
{
payloadHandler().Handle(payload);
}
}
}
Вот что я должен публиковать сообщения.
var subscribers = new List<Func<IHandle>> {() => new SomeHandler()};
var eventPublisher = new EventPublisher(subscribers);
eventPublisher.Publish(new SomeMessage { Text = "Some random text..." });
Проблема во мне. При публикации сообщения не обнаруживаются обработчики, которые могут обрабатывать полезную нагрузку. Это имеет смысл, поскольку я зарегистрировал своих подписчиков как Func
вместо Func
.
Интерфейс, от которого наследуются мои классы обработчиков, взят из Caliburn.Micro.EventAggregator и выглядит следующим образом.
public interface IHandle {}
public interface IHandle<TMessage> : IHandle {
void Handle(TMessage message);
}
Какой должен быть тип _subscribers
для обработки IHandle <>
где универсальным типом может быть любой конкретный тип?