@@ -16,17 +16,18 @@ namespace Microsoft.AspNet.Http.Internal
16
16
{
17
17
public class DefaultHttpContext : HttpContext , IFeatureCache
18
18
{
19
- private readonly HttpRequest _request ;
20
- private readonly HttpResponse _response ;
21
- private ConnectionInfo _connection ;
22
- private AuthenticationManager _authenticationManager ;
19
+ private readonly DefaultHttpRequest _request ;
20
+ private readonly DefaultHttpResponse _response ;
21
+
22
+ private DefaultAuthenticationManager _authenticationManager ;
23
+ private DefaultConnectionInfo _connection ;
24
+ private DefaultWebSocketManager _websockets ;
23
25
24
26
private IItemsFeature _items ;
25
27
private IServiceProvidersFeature _serviceProviders ;
26
28
private IHttpAuthenticationFeature _authentication ;
27
29
private IHttpRequestLifetimeFeature _lifetime ;
28
30
private ISessionFeature _session ;
29
- private WebSocketManager _websockets ;
30
31
31
32
private IFeatureCollection _features ;
32
33
private int _cachedFeaturesRevision = - 1 ;
@@ -36,28 +37,54 @@ public DefaultHttpContext()
36
37
{
37
38
_features . Set < IHttpRequestFeature > ( new HttpRequestFeature ( ) ) ;
38
39
_features . Set < IHttpResponseFeature > ( new HttpResponseFeature ( ) ) ;
40
+ ( ( IFeatureCache ) this ) . SetFeaturesRevision ( ) ;
39
41
}
40
42
41
43
public DefaultHttpContext ( IFeatureCollection features )
42
44
{
43
45
_features = features ;
44
46
_request = new DefaultHttpRequest ( this , features ) ;
45
47
_response = new DefaultHttpResponse ( this , features ) ;
48
+ ( ( IFeatureCache ) this ) . SetFeaturesRevision ( ) ;
46
49
}
47
50
48
51
void IFeatureCache . CheckFeaturesRevision ( )
49
52
{
50
53
if ( _cachedFeaturesRevision != _features . Revision )
51
54
{
52
- _items = null ;
53
- _serviceProviders = null ;
54
- _authentication = null ;
55
- _lifetime = null ;
56
- _session = null ;
57
- _cachedFeaturesRevision = _features . Revision ;
55
+ ResetFeatures ( ) ;
58
56
}
59
57
}
60
58
59
+ void IFeatureCache . SetFeaturesRevision ( )
60
+ {
61
+ _cachedFeaturesRevision = _features . Revision ;
62
+ }
63
+
64
+ public void UpdateFeatures ( IFeatureCollection features )
65
+ {
66
+ _features = features ;
67
+ ResetFeatures ( ) ;
68
+
69
+ _request . UpdateFeatures ( features ) ;
70
+ _response . UpdateFeatures ( features ) ;
71
+
72
+ _authenticationManager ? . UpdateFeatures ( features ) ;
73
+ _connection ? . UpdateFeatures ( features ) ;
74
+ _websockets ? . UpdateFeatures ( features ) ;
75
+ }
76
+
77
+ private void ResetFeatures ( )
78
+ {
79
+ _items = null ;
80
+ _serviceProviders = null ;
81
+ _authentication = null ;
82
+ _lifetime = null ;
83
+ _session = null ;
84
+
85
+ ( ( IFeatureCache ) this ) . SetFeaturesRevision ( ) ;
86
+ }
87
+
61
88
IItemsFeature ItemsFeature
62
89
{
63
90
get
0 commit comments