@@ -88,29 +88,45 @@ internal bool UnregisterEventHandler<TEvent>(Mod mod, IEventHandler<TEvent> even
8888 private bool RegisterAsyncEventHandler < TBaseEvent , TEvent > ( Mod mod , IAsyncEventHandler < TEvent > asyncEventHandler )
8989 where TBaseEvent : AsyncEvent
9090 where TEvent : TBaseEvent
91- => _eventDispatchers . GetOrCreateValue ( CreateAsyncDispatcher < TBaseEvent > ) . AddHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( asyncEventHandler ) ) ;
91+ => _eventDispatchers . GetOrCreateValue ( CreateAsyncDispatcher < TBaseEvent > )
92+ . AddHandler ( mod , typeof ( TBaseEvent ) == typeof ( TEvent )
93+ ? ( IAsyncEventHandler < TBaseEvent > ) asyncEventHandler
94+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( asyncEventHandler ) ) ;
9295
9396 private bool RegisterCancelableAsyncEventHandler < TBaseEvent , TEvent > ( Mod mod , ICancelableAsyncEventHandler < TEvent > cancelableAsyncEventHandler )
9497 where TBaseEvent : CancelableAsyncEvent
9598 where TEvent : TBaseEvent
96- => _eventDispatchers . GetOrCreateValue ( CreateCancelableAsyncDispatcher < TBaseEvent > ) . AddHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableAsyncEventHandler ) ) ;
99+ => _eventDispatchers . GetOrCreateValue ( CreateCancelableAsyncDispatcher < TBaseEvent > )
100+ . AddHandler ( mod , typeof ( TBaseEvent ) == typeof ( TEvent )
101+ ? ( ICancelableAsyncEventHandler < TBaseEvent > ) cancelableAsyncEventHandler
102+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableAsyncEventHandler ) ) ;
97103
98104 private bool RegisterCancelableSyncEventHandler < TBaseEvent , TEvent > ( Mod mod , ICancelableEventHandler < TEvent > cancelableEventHandler )
99105 where TBaseEvent : CancelableSyncEvent
100106 where TEvent : TBaseEvent
101- => _eventDispatchers . GetOrCreateValue ( CreateCancelableDispatcher < TBaseEvent > ) . AddHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableEventHandler ) ) ;
107+ => _eventDispatchers . GetOrCreateValue ( CreateCancelableDispatcher < TBaseEvent > )
108+ . AddHandler ( mod , typeof ( TBaseEvent ) == typeof ( TEvent )
109+ ? ( ICancelableEventHandler < TBaseEvent > ) cancelableEventHandler
110+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableEventHandler ) ) ;
102111
103112 private bool RegisterSyncEventHandler < TBaseEvent , TEvent > ( Mod mod , IEventHandler < TEvent > eventHandler )
104113 where TBaseEvent : SyncEvent
105114 where TEvent : TBaseEvent
106- => _eventDispatchers . GetOrCreateValue ( CreateDispatcher < TBaseEvent > ) . AddHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( eventHandler ) ) ;
115+ => _eventDispatchers . GetOrCreateValue ( CreateDispatcher < TBaseEvent > )
116+ . AddHandler ( mod , typeof ( TBaseEvent ) == typeof ( TEvent )
117+ ? ( IEventHandler < TBaseEvent > ) eventHandler
118+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( eventHandler ) ) ;
107119
108120 private bool UnregisterAsyncEventHandler < TBaseEvent , TEvent > ( Mod mod , IAsyncEventHandler < TEvent > asyncEventHandler )
109121 where TBaseEvent : AsyncEvent
110122 where TEvent : TBaseEvent
111123 {
124+ var handler = typeof ( TBaseEvent ) == typeof ( TEvent )
125+ ? ( IAsyncEventHandler < TBaseEvent > ) asyncEventHandler
126+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( asyncEventHandler ) ;
127+
112128 if ( _eventDispatchers . TryGetValue < AsyncEventDispatcher < TEvent > > ( out var asyncEventDispatcher ) )
113- return asyncEventDispatcher ! . RemoveHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( asyncEventHandler ) ) ;
129+ return asyncEventDispatcher ! . RemoveHandler ( mod , handler ) ;
114130
115131 return false ;
116132 }
@@ -119,8 +135,12 @@ private bool UnregisterCancelableAsyncEventHandler<TBaseEvent, TEvent>(Mod mod,
119135 where TBaseEvent : CancelableAsyncEvent
120136 where TEvent : TBaseEvent
121137 {
138+ var handler = typeof ( TBaseEvent ) == typeof ( TEvent )
139+ ? ( ICancelableAsyncEventHandler < TBaseEvent > ) cancelableAsyncEventHandler
140+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableAsyncEventHandler ) ;
141+
122142 if ( _eventDispatchers . TryGetValue < CancelableAsyncEventDispatcher < TEvent > > ( out var cancelableAsyncEventDispatcher ) )
123- return cancelableAsyncEventDispatcher ! . RemoveHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableAsyncEventHandler ) ) ;
143+ return cancelableAsyncEventDispatcher ! . RemoveHandler ( mod , handler ) ;
124144
125145 return false ;
126146 }
@@ -129,8 +149,12 @@ private bool UnregisterCancelableSyncEventHandler<TBaseEvent, TEvent>(Mod mod, I
129149 where TBaseEvent : CancelableSyncEvent
130150 where TEvent : TBaseEvent
131151 {
152+ var handler = typeof ( TBaseEvent ) == typeof ( TEvent )
153+ ? ( ICancelableEventHandler < TBaseEvent > ) cancelableEventHandler
154+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableEventHandler ) ;
155+
132156 if ( _eventDispatchers . TryGetValue < CancelableEventDispatcher < TEvent > > ( out var cancelableEventDispatcher ) )
133- return cancelableEventDispatcher ! . RemoveHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( cancelableEventHandler ) ) ;
157+ return cancelableEventDispatcher ! . RemoveHandler ( mod , handler ) ;
134158
135159 return false ;
136160 }
@@ -139,8 +163,12 @@ private bool UnregisterSyncEventHandler<TBaseEvent, TEvent>(Mod mod, IEventHandl
139163 where TBaseEvent : SyncEvent
140164 where TEvent : TBaseEvent
141165 {
166+ var handler = typeof ( TBaseEvent ) == typeof ( TEvent )
167+ ? ( IEventHandler < TBaseEvent > ) eventHandler
168+ : EventHandlerProxy . For < TBaseEvent , TEvent > ( eventHandler ) ;
169+
142170 if ( _eventDispatchers . TryGetValue < EventDispatcher < TEvent > > ( out var eventDispatcher ) )
143- return eventDispatcher ! . RemoveHandler ( mod , EventHandlerProxy . For < TBaseEvent , TEvent > ( eventHandler ) ) ;
171+ return eventDispatcher ! . RemoveHandler ( mod , handler ) ;
144172
145173 return false ;
146174 }
0 commit comments