now had more generic possibilites.
This commit is contained in:
		
							parent
							
								
									dc9c7e1674
								
							
						
					
					
						commit
						9262708ab8
					
				| @ -24,4 +24,14 @@ namespace PoweredSoft.DynamicQuery.Core | |||||||
|     { |     { | ||||||
|         Task AfterReadAsync(List<Tuple<T, object>> pairs, CancellationToken cancellationToken = default(CancellationToken)); |         Task AfterReadAsync(List<Tuple<T, object>> pairs, CancellationToken cancellationToken = default(CancellationToken)); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public interface IAfterReadInterceptor<T, T2> : IQueryInterceptor | ||||||
|  |     { | ||||||
|  |         void AfterRead(List<Tuple<T, T2>> pairs); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public interface IAfterReadInterceptorAsync<T, T2> : IQueryInterceptor | ||||||
|  |     { | ||||||
|  |         Task AfterReadAsync(List<Tuple<T, T2>> pairs, CancellationToken cancellationToken = default(CancellationToken)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -13,4 +13,9 @@ namespace PoweredSoft.DynamicQuery.Core | |||||||
|     { |     { | ||||||
|         object InterceptResultTo(T entity); |         object InterceptResultTo(T entity); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public interface IQueryConvertInterceptor<T, T2> : IQueryInterceptor | ||||||
|  |     { | ||||||
|  |         T2 InterceptResultTo(T entity); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -190,7 +190,7 @@ namespace PoweredSoft.DynamicQuery | |||||||
|             for (var i = 0; i < entities.Count; i++) |             for (var i = 0; i < entities.Count; i++) | ||||||
|                 ret.Add(InterceptConvertToObject<TSource, TRecord>(entities[i])); |                 ret.Add(InterceptConvertToObject<TSource, TRecord>(entities[i])); | ||||||
| 
 | 
 | ||||||
|             var pairs = entities.Select((t, index) => Tuple.Create(t, (object)ret[index])).ToList(); |             var pairs = entities.Select((t, index) => Tuple.Create(t, ret[index])).ToList(); | ||||||
|             await AfterReadInterceptors<TSource, TRecord>(pairs); |             await AfterReadInterceptors<TSource, TRecord>(pairs); | ||||||
| 
 | 
 | ||||||
|             return ret; |             return ret; | ||||||
| @ -209,16 +209,22 @@ namespace PoweredSoft.DynamicQuery | |||||||
|                 await interceptor.AfterReadEntityAsync(entities); |                 await interceptor.AfterReadEntityAsync(entities); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected virtual async Task AfterReadInterceptors<TSource, TRecord>(List<Tuple<TSource, object>> pairs) |         protected virtual async Task AfterReadInterceptors<TSource, TRecord>(List<Tuple<TSource, TRecord>> pairs) | ||||||
|         { |         { | ||||||
|  |             var objPair = pairs.Select(t => Tuple.Create(t.Item1, (object)t.Item2)).ToList(); | ||||||
|  | 
 | ||||||
|             Interceptors |             Interceptors | ||||||
|                 .Where(t => t is IAfterReadInterceptor<TSource>) |                 .Where(t => t is IAfterReadInterceptor<TSource>) | ||||||
|                 .Cast<IAfterReadInterceptor<TSource>>() |                 .Cast<IAfterReadInterceptor<TSource>>() | ||||||
|                 .ToList() |                 .ToList() | ||||||
|                 .ForEach(t => t.AfterRead(pairs)); |                 .ForEach(t => t.AfterRead(objPair)); | ||||||
| 
 | 
 | ||||||
|             var asyncInterceptors = Interceptors.Where(t => t is IAfterReadInterceptorAsync<TSource>).Cast<IAfterReadInterceptorAsync<TSource>>(); |             var asyncInterceptors = Interceptors.Where(t => t is IAfterReadInterceptorAsync<TSource>).Cast<IAfterReadInterceptorAsync<TSource>>(); | ||||||
|             foreach (var interceptor in asyncInterceptors) |             foreach (var interceptor in asyncInterceptors) | ||||||
|  |                 await interceptor.AfterReadAsync(objPair); | ||||||
|  | 
 | ||||||
|  |             var asyncInterceptors2 = Interceptors.Where(t => t is IAfterReadInterceptorAsync<TSource, TRecord>).Cast<IAfterReadInterceptorAsync<TSource, TRecord>>(); | ||||||
|  |             foreach (var interceptor in asyncInterceptors2) | ||||||
|                 await interceptor.AfterReadAsync(pairs); |                 await interceptor.AfterReadAsync(pairs); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -240,6 +246,17 @@ namespace PoweredSoft.DynamicQuery | |||||||
|                     return o; |                     return o; | ||||||
|                 }); |                 }); | ||||||
| 
 | 
 | ||||||
|  |             o = Interceptors | ||||||
|  |                .Where(t => t is IQueryConvertInterceptor<TSource, TRecord>) | ||||||
|  |                .Cast<IQueryConvertInterceptor<TSource, TRecord>>() | ||||||
|  |                .Aggregate(o, (prev, interceptor) => | ||||||
|  |                { | ||||||
|  |                    if (prev is TSource) | ||||||
|  |                        return interceptor.InterceptResultTo((TSource)prev); | ||||||
|  | 
 | ||||||
|  |                    return o; | ||||||
|  |                }); | ||||||
|  | 
 | ||||||
|             return (TRecord)o; |             return (TRecord)o; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -429,7 +446,7 @@ namespace PoweredSoft.DynamicQuery | |||||||
|             var entities = lists.SelectMany(t => t.entities).ToList(); |             var entities = lists.SelectMany(t => t.entities).ToList(); | ||||||
|             await AfterEntityReadInterceptors(entities); |             await AfterEntityReadInterceptors(entities); | ||||||
| 
 | 
 | ||||||
|             var pairs = new List<Tuple<TSource, object>>(); |             var pairs = new List<Tuple<TSource, TRecord>>(); | ||||||
| 
 | 
 | ||||||
|             lists.ForEach(innerList => |             lists.ForEach(innerList => | ||||||
|             { |             { | ||||||
| @ -438,7 +455,7 @@ namespace PoweredSoft.DynamicQuery | |||||||
|                     var entity = innerList.entities[i]; |                     var entity = innerList.entities[i]; | ||||||
|                     var convertedObject = InterceptConvertToObject<TSource, TRecord>(entity); |                     var convertedObject = InterceptConvertToObject<TSource, TRecord>(entity); | ||||||
|                     innerList.group.Data.Add(convertedObject); |                     innerList.group.Data.Add(convertedObject); | ||||||
|                     pairs.Add(Tuple.Create(entity, convertedObject as object)); |                     pairs.Add(Tuple.Create(entity, convertedObject)); | ||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user