Общий метод EventAggregator Helper

Почему это дает ошибку компилятора?

public class EventAggregationHelper {

    public static SubscriptionToken SubscribeToEvent<T>( IEventAggregator eventAggregator ) where T : EventBase {

        T evt = eventAggregator.GetEvent<T>();
        //T evt = eventAggregator.GetEvent<T>();
        return null;
    }
}

Ошибка:

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0310 «T» должен быть неабстрактным типом с общедоступным конструктором без параметров, чтобы использовать его в качестве параметра «TEventType» в универсальном типе или методе «IEventAggregator.GetEvent()» EntitySetGridTWPF D :\DEVELOPER.NET\Comercial\EntityBookCommon\EntitySetGridTWPF\EventAggregation\EventAggregationHelper.cs 9 Active

на линии:

T evt = eventAggregator.GetEvent<T>();

Я использовал этот подход для вызова других универсальных методов раньше и работал. Что такого особенного в GetEvent?

Заранее спасибо.


person Yakumo Fujii    schedule 10.10.2016    source источник
comment
Возможно, начните с чтения и понимания ошибки, с которой вы столкнулись.   -  person kiziu    schedule 10.10.2016
comment
@kiziu Поверьте мне, когда я говорю вам, что пытаюсь искать информацию и пробую слишком много вещей, прежде чем спрашивать на любом форуме, включая этот. Иногда у каждого бывают глупые ошибки.   -  person Yakumo Fujii    schedule 11.10.2016


Ответы (1)


IEventAggregator.GetEvent имеет ограничение new(), что означает, что ваша подписка также должна добавить ограничение new(), и это также должно выполняться вашим классом реализации T, который должен иметь общедоступный конструктор без параметров (по умолчанию) (и не должен быть абстрактным).

public static SubscriptionToken SubscribeToEvent<T>
            (IEventAggregator eventAggregator) where T : EventBase, new() {
person stuartd    schedule 10.10.2016
comment
Я также добавил new(), но не тогда, когда T был принудительно привязан к EventBase, а вместо этого к PubSubEvent, поэтому, должно быть, поэтому он сначала не работал, а потом я запутался. Большое спасибо. - person Yakumo Fujii; 10.10.2016