Я использую MediatR для публикации уведомлений.
Я определил обработчик уведомлений следующим образом:
public class TestNotificationHandler : INotificationHandler<TestNotification>, IWithinTransaction
{
public Task Handle(TestNotification notification, CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
Затем я создал собственного издателя Mediatr, как показано здесь .Происходит следующее: в классе Publisher, в зависимости от выбранной стратегии, вызывается конкретная реализация, которая вызывает зарегистрированные обработчики событий, например, для стратегии SyncStopOnException:
private async Task SyncStopOnException(IEnumerable<Func<Task>> handlers)
{
foreach (var handler in handlers)
{
await handler().ConfigureAwait(false);
}
}
Действительно, в foreach я получаюверните обработчик TestNotificationHandler правильно, и он будет выполнен.Так что это работает нормально.
Но теперь я хочу отфильтровать эти обработчики, чтобы выполнялись только те, которые реализуют мой пользовательский интерфейс IWithinTransaction .
И вот тут у меня проблемы.Поскольку обработчик имеет тип System.Func.
Итак, вопрос: как я могу узнать, реализует ли этот интерфейс обработчик уведомлений, которому принадлежит обработчик?Единственное, что близко, это свойство handler.Target
, но я не знаю, как его использовать или проверить, реализует ли он мой интерфейс.
Любые намеки были бы великолепны :) 1027 *