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() {