@@ -46,11 +46,12 @@ public Task<TResponse> Send<TResponse>(IRequest<TResponse> request, Cancellation
4646 throw new ArgumentNullException ( nameof ( request ) ) ;
4747 }
4848
49- var requestType = request . GetType ( ) ;
50-
51- var handler = ( RequestHandlerWrapper < TResponse > ) _requestHandlers . GetOrAdd ( requestType ,
52- static t => ( RequestHandlerBase ) ( Activator . CreateInstance ( typeof ( RequestHandlerWrapperImpl < , > ) . MakeGenericType ( t , typeof ( TResponse ) ) )
53- ?? throw new InvalidOperationException ( $ "Could not create wrapper type for { t } ") ) ) ;
49+ var handler = ( RequestHandlerWrapper < TResponse > ) _requestHandlers . GetOrAdd ( request . GetType ( ) , static requestType =>
50+ {
51+ var wrapperType = typeof ( RequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestType , typeof ( TResponse ) ) ;
52+ var wrapper = Activator . CreateInstance ( wrapperType ) ?? throw new InvalidOperationException ( $ "Could not create wrapper type for { requestType } ") ;
53+ return ( RequestHandlerBase ) wrapper ;
54+ } ) ;
5455
5556 return handler . Handle ( request , _serviceProvider , cancellationToken ) ;
5657 }
@@ -63,11 +64,12 @@ public Task Send<TRequest>(TRequest request, CancellationToken cancellationToken
6364 throw new ArgumentNullException ( nameof ( request ) ) ;
6465 }
6566
66- var requestType = request . GetType ( ) ;
67-
68- var handler = ( RequestHandlerWrapper ) _requestHandlers . GetOrAdd ( requestType ,
69- static t => ( RequestHandlerBase ) ( Activator . CreateInstance ( typeof ( RequestHandlerWrapperImpl < > ) . MakeGenericType ( t ) )
70- ?? throw new InvalidOperationException ( $ "Could not create wrapper type for { t } ") ) ) ;
67+ var handler = ( RequestHandlerWrapper ) _requestHandlers . GetOrAdd ( request . GetType ( ) , static requestType =>
68+ {
69+ var wrapperType = typeof ( RequestHandlerWrapperImpl < > ) . MakeGenericType ( requestType ) ;
70+ var wrapper = Activator . CreateInstance ( wrapperType ) ?? throw new InvalidOperationException ( $ "Could not create wrapper type for { requestType } ") ;
71+ return ( RequestHandlerBase ) wrapper ;
72+ } ) ;
7173
7274 return handler . Handle ( request , _serviceProvider , cancellationToken ) ;
7375 }
@@ -78,41 +80,31 @@ public Task Send<TRequest>(TRequest request, CancellationToken cancellationToken
7880 {
7981 throw new ArgumentNullException ( nameof ( request ) ) ;
8082 }
81- var requestType = request . GetType ( ) ;
82- var handler = _requestHandlers . GetOrAdd ( requestType ,
83- static requestTypeKey =>
84- {
85- var requestInterfaceType = requestTypeKey
86- . GetInterfaces ( )
87- . FirstOrDefault ( static i => i . IsGenericType && i . GetGenericTypeDefinition ( ) == typeof ( IRequest < > ) ) ;
8883
89- Type wrapperType ;
84+ var handler = _requestHandlers . GetOrAdd ( request . GetType ( ) , static requestType =>
85+ {
86+ Type wrapperType ;
9087
88+ var requestInterfaceType = requestType . GetInterfaces ( ) . FirstOrDefault ( static i => i . IsGenericType && i . GetGenericTypeDefinition ( ) == typeof ( IRequest < > ) ) ;
89+ if ( requestInterfaceType is null )
90+ {
91+ requestInterfaceType = requestType . GetInterfaces ( ) . FirstOrDefault ( static i => i == typeof ( IRequest ) ) ;
9192 if ( requestInterfaceType is null )
9293 {
93- requestInterfaceType = requestTypeKey
94- . GetInterfaces ( )
95- . FirstOrDefault ( static i => i == typeof ( IRequest ) ) ;
96-
97- if ( requestInterfaceType is null )
98- {
99- throw new ArgumentException ( $ "{ requestTypeKey . Name } does not implement { nameof ( IRequest ) } ",
100- nameof ( request ) ) ;
101- }
102-
103- wrapperType =
104- typeof ( RequestHandlerWrapperImpl < > ) . MakeGenericType ( requestTypeKey ) ;
105- }
106- else
107- {
108- var responseType = requestInterfaceType . GetGenericArguments ( ) [ 0 ] ;
109- wrapperType =
110- typeof ( RequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestTypeKey , responseType ) ;
94+ throw new ArgumentException ( $ "{ requestType . Name } does not implement { nameof ( IRequest ) } ", nameof ( request ) ) ;
11195 }
11296
113- return ( RequestHandlerBase ) ( Activator . CreateInstance ( wrapperType )
114- ?? throw new InvalidOperationException ( $ "Could not create wrapper for type { wrapperType } ") ) ;
115- } ) ;
97+ wrapperType = typeof ( RequestHandlerWrapperImpl < > ) . MakeGenericType ( requestType ) ;
98+ }
99+ else
100+ {
101+ var responseType = requestInterfaceType . GetGenericArguments ( ) [ 0 ] ;
102+ wrapperType = typeof ( RequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestType , responseType ) ;
103+ }
104+
105+ var wrapper = Activator . CreateInstance ( wrapperType ) ?? throw new InvalidOperationException ( $ "Could not create wrapper for type { requestType } ") ;
106+ return ( RequestHandlerBase ) wrapper ;
107+ } ) ;
116108
117109 // call via dynamic dispatch to avoid calling through reflection for performance reasons
118110 return handler . Handle ( request , _serviceProvider , cancellationToken ) ;
@@ -149,10 +141,12 @@ protected virtual Task PublishCore(IEnumerable<NotificationHandlerExecutor> hand
149141
150142 private Task PublishNotification ( INotification notification , CancellationToken cancellationToken = default )
151143 {
152- var notificationType = notification . GetType ( ) ;
153- var handler = _notificationHandlers . GetOrAdd ( notificationType ,
154- static t => ( NotificationHandlerWrapper ) ( Activator . CreateInstance ( typeof ( NotificationHandlerWrapperImpl < > ) . MakeGenericType ( t ) )
155- ?? throw new InvalidOperationException ( $ "Could not create wrapper for type { t } ") ) ) ;
144+ var handler = _notificationHandlers . GetOrAdd ( notification . GetType ( ) , static notificationType =>
145+ {
146+ var wrapperType = typeof ( NotificationHandlerWrapperImpl < > ) . MakeGenericType ( notificationType ) ;
147+ var wrapper = Activator . CreateInstance ( wrapperType ) ?? throw new InvalidOperationException ( $ "Could not create wrapper for type { notificationType } ") ;
148+ return ( NotificationHandlerWrapper ) wrapper ;
149+ } ) ;
156150
157151 return handler . Handle ( notification , _serviceProvider , PublishCore , cancellationToken ) ;
158152 }
@@ -165,10 +159,12 @@ public IAsyncEnumerable<TResponse> CreateStream<TResponse>(IStreamRequest<TRespo
165159 throw new ArgumentNullException ( nameof ( request ) ) ;
166160 }
167161
168- var requestType = request . GetType ( ) ;
169-
170- var streamHandler = ( StreamRequestHandlerWrapper < TResponse > ) _streamRequestHandlers . GetOrAdd ( requestType ,
171- t => ( StreamRequestHandlerBase ) Activator . CreateInstance ( typeof ( StreamRequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestType , typeof ( TResponse ) ) ) ) ;
162+ var streamHandler = ( StreamRequestHandlerWrapper < TResponse > ) _streamRequestHandlers . GetOrAdd ( request . GetType ( ) , static requestType =>
163+ {
164+ var wrapperType = typeof ( StreamRequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestType , typeof ( TResponse ) ) ;
165+ var wrapper = Activator . CreateInstance ( wrapperType ) ?? throw new InvalidOperationException ( $ "Could not create wrapper for type { requestType } ") ;
166+ return ( StreamRequestHandlerBase ) wrapper ;
167+ } ) ;
172168
173169 var items = streamHandler . Handle ( request , _serviceProvider , cancellationToken ) ;
174170
@@ -183,26 +179,20 @@ public IAsyncEnumerable<TResponse> CreateStream<TResponse>(IStreamRequest<TRespo
183179 throw new ArgumentNullException ( nameof ( request ) ) ;
184180 }
185181
186- var requestType = request . GetType ( ) ;
187-
188- var handler = _streamRequestHandlers . GetOrAdd ( requestType ,
189- requestTypeKey =>
182+ var handler = _streamRequestHandlers . GetOrAdd ( request . GetType ( ) , static requestType =>
183+ {
184+ var requestInterfaceType = requestType . GetInterfaces ( ) . FirstOrDefault ( static i => i . IsGenericType && i . GetGenericTypeDefinition ( ) == typeof ( IStreamRequest < > ) ) ;
185+ if ( requestInterfaceType is null )
190186 {
191- var requestInterfaceType = requestTypeKey
192- . GetInterfaces ( )
193- . FirstOrDefault ( static i => i . IsGenericType && i . GetGenericTypeDefinition ( ) == typeof ( IStreamRequest < > ) ) ;
194- var isValidRequest = requestInterfaceType != null ;
187+ throw new ArgumentException ( $ "{ requestType . Name } does not implement IStreamRequest<TResponse>", nameof ( request ) ) ;
188+ }
195189
196- if ( ! isValidRequest )
197- {
198- throw new ArgumentException ( $ "{ requestType . Name } does not implement IStreamRequest<TResponse>", nameof ( requestTypeKey ) ) ;
199- }
190+ var responseType = requestInterfaceType . GetGenericArguments ( ) [ 0 ] ;
191+ var wrapperType = typeof ( StreamRequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestType , responseType ) ;
192+ var wrapper = Activator . CreateInstance ( wrapperType ) ?? throw new InvalidOperationException ( $ "Could not create wrapper for type { requestType } ") ;
193+ return ( StreamRequestHandlerBase ) wrapper ;
194+ } ) ;
200195
201- var responseType = requestInterfaceType ! . GetGenericArguments ( ) [ 0 ] ;
202- return ( StreamRequestHandlerBase ) Activator . CreateInstance ( typeof ( StreamRequestHandlerWrapperImpl < , > ) . MakeGenericType ( requestTypeKey , responseType ) ) ;
203- } ) ;
204-
205- // call via dynamic dispatch to avoid calling through reflection for performance reasons
206196 var items = handler . Handle ( request , _serviceProvider , cancellationToken ) ;
207197
208198 return items ;
0 commit comments