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
9
2
{
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
+
10
13
public abstract class ClientBase < TOptions >
11
14
where TOptions : class , IProvideRequestFilters , new ( )
12
15
{
13
16
private IMediaFormatterProvider mediaFormatterProvider ;
17
+ private IServiceProvider serviceProvider ;
18
+ private Lazy < IRequestFilter [ ] > requestFilters ;
14
19
15
20
public ClientBase ( IOptions < TOptions > options ,
16
- IMediaFormatterProvider mediaFormatterProvider )
21
+ IMediaFormatterProvider mediaFormatterProvider ,
22
+ IServiceProvider serviceProvider )
17
23
{
18
24
this . Options = options . Value ;
19
25
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
+ ) ;
20
30
}
21
31
22
32
protected TOptions Options { get ; private set ; }
@@ -34,7 +44,7 @@ protected Task<TTarget> TransformResponseAsync<TTarget>(HttpResponseMessage mess
34
44
protected HttpRequestMessage ApplyFilters ( HttpRequestMessage requestMessage , params string [ ] securityDefinitions )
35
45
{
36
46
HttpRequestMessage finalMessage = requestMessage ;
37
- foreach ( var filter in this . Options . RequestFilters )
47
+ foreach ( var filter in this . requestFilters . Value )
38
48
{
39
49
finalMessage = filter . Apply ( requestMessage , securityDefinitions ) ?? finalMessage ;
40
50
}
0 commit comments