1- using Microsoft . Extensions . Options ;
2- using System . Collections . Generic ;
3- using System . Net ;
4- using System . Net . Http ;
5- using System . Text ;
6- using System . Threading . Tasks ;
7-
8- namespace GeekLearning . RestKit . Core
1+ namespace GeekLearning . RestKit . Core
92{
3+ using Microsoft . Extensions . Options ;
4+ using System ;
5+ using System . Linq ;
6+ using System . Collections . Generic ;
7+ using System . Net ;
8+ using System . Net . Http ;
9+ using System . Text ;
10+ using System . Threading . Tasks ;
11+ using Microsoft . Extensions . DependencyInjection ;
12+
1013 public abstract class ClientBase < TOptions >
1114 where TOptions : class , IProvideRequestFilters , new ( )
1215 {
1316 private IMediaFormatterProvider mediaFormatterProvider ;
17+ private IServiceProvider serviceProvider ;
18+ private Lazy < IRequestFilter [ ] > requestFilters ;
1419
1520 public ClientBase ( IOptions < TOptions > options ,
16- IMediaFormatterProvider mediaFormatterProvider )
21+ IMediaFormatterProvider mediaFormatterProvider ,
22+ IServiceProvider serviceProvider )
1723 {
1824 this . Options = options . Value ;
1925 this . mediaFormatterProvider = mediaFormatterProvider ;
26+ this . serviceProvider = serviceProvider ;
27+ this . requestFilters = new Lazy < IRequestFilter [ ] > ( ( ) =>
28+ this . Options . RequestFilters . Select ( x=> ActivatorUtilities . CreateInstance ( this . serviceProvider , x . Type , x . Arguments ) ) . Cast < IRequestFilter > ( ) . ToArray ( )
29+ ) ;
2030 }
2131
2232 protected TOptions Options { get ; private set ; }
@@ -34,7 +44,7 @@ protected Task<TTarget> TransformResponseAsync<TTarget>(HttpResponseMessage mess
3444 protected HttpRequestMessage ApplyFilters ( HttpRequestMessage requestMessage , params string [ ] securityDefinitions )
3545 {
3646 HttpRequestMessage finalMessage = requestMessage ;
37- foreach ( var filter in this . Options . RequestFilters )
47+ foreach ( var filter in this . requestFilters . Value )
3848 {
3949 finalMessage = filter . Apply ( requestMessage , securityDefinitions ) ?? finalMessage ;
4050 }
0 commit comments