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 Активно

на линии:

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

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

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

1 ответ

Решение

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

public static SubscriptionToken SubscribeToEvent<T>
            (IEventAggregator eventAggregator) where T : EventBase, new() {
Другие вопросы по тегам