var instance = handler as INotification<TNotification>;
выглядит очень странно.Похоже, у вас обычно есть TNotification
в качестве некоторого класса уведомлений, например Notification1
.Таким образом, в результате приведено значение
handler as INotification<Notification1>
, которое действительно завершится ошибкой, так как код, похоже, создает handlerType
для TNotification
(Notification1
в примере), который обычно не будет Notification1 : INotificaton<Notification1>
(такжевозможный - Рекурсивные универсальные типы ).
Возможно, вы хотите что-то вроде
async Task RunAsync<TNotification, TEvent>(TNotification notification)
where TNotification : INotification<TEvent>
{
...
var instance = (INotification<TEvent>)handler;
…
}
Обратите внимание, что вы должны указать тип события (TEvent
), так как отдельный класс может реализоватьмножественный интерфейс, такой как
class NightWatch :
INotification<ArrowEvent>, INotification<GunEvent>, INotification<OwlEvent>
{}
, и нет способа выяснить, к какому типу приводиться, основываясь только на классе.