Skip to content
This repository was archived by the owner on Nov 20, 2018. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e4f4748

Browse files
committedDec 7, 2015
Allow feature cache to be updated+invalidated
1 parent dfe2d41 commit e4f4748

10 files changed

+153
-42
lines changed
 

‎src/Microsoft.AspNet.Http/Authentication/DefaultAuthenticationManager.cs

+15-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Microsoft.AspNet.Http.Authentication.Internal
1414
{
1515
public class DefaultAuthenticationManager : AuthenticationManager, IFeatureCache
1616
{
17-
private readonly IFeatureCollection _features;
17+
private IFeatureCollection _features;
1818
private int _cachedFeaturesRevision = -1;
1919

2020
private IHttpAuthenticationFeature _authentication;
@@ -29,12 +29,23 @@ void IFeatureCache.CheckFeaturesRevision()
2929
{
3030
if (_cachedFeaturesRevision != _features.Revision)
3131
{
32-
_authentication = null;
33-
_response = null;
34-
_cachedFeaturesRevision = _features.Revision;
32+
ResetFeatures();
3533
}
3634
}
3735

36+
public void ReplaceFeatures(IFeatureCollection features)
37+
{
38+
_features = features;
39+
ResetFeatures();
40+
}
41+
42+
private void ResetFeatures()
43+
{
44+
_authentication = null;
45+
_response = null;
46+
_cachedFeaturesRevision = _features.Revision;
47+
}
48+
3849
private IHttpAuthenticationFeature HttpAuthenticationFeature
3950
{
4051
get

‎src/Microsoft.AspNet.Http/DefaultConnectionInfo.cs

+15-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.AspNet.Http.Internal
1212
{
1313
public class DefaultConnectionInfo : ConnectionInfo, IFeatureCache
1414
{
15-
private readonly IFeatureCollection _features;
15+
private IFeatureCollection _features;
1616
private int _cachedFeaturesRevision = -1;
1717

1818
private IHttpConnectionFeature _connection;
@@ -27,12 +27,23 @@ void IFeatureCache.CheckFeaturesRevision()
2727
{
2828
if (_cachedFeaturesRevision != _features.Revision)
2929
{
30-
_connection = null;
31-
_tlsConnection = null;
32-
_cachedFeaturesRevision = _features.Revision;
30+
ResetFeatures();
3331
}
3432
}
3533

34+
public void ReplaceFeatures(IFeatureCollection features)
35+
{
36+
_features = features;
37+
ResetFeatures();
38+
}
39+
40+
private void ResetFeatures()
41+
{
42+
_connection = null;
43+
_tlsConnection = null;
44+
_cachedFeaturesRevision = _features.Revision;
45+
}
46+
3647
private IHttpConnectionFeature HttpConnectionFeature
3748
{
3849
get

‎src/Microsoft.AspNet.Http/DefaultHttpContext.cs

+30-11
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,18 @@ namespace Microsoft.AspNet.Http.Internal
1616
{
1717
public class DefaultHttpContext : HttpContext, IFeatureCache
1818
{
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;
2325

2426
private IItemsFeature _items;
2527
private IServiceProvidersFeature _serviceProviders;
2628
private IHttpAuthenticationFeature _authentication;
2729
private IHttpRequestLifetimeFeature _lifetime;
2830
private ISessionFeature _session;
29-
private WebSocketManager _websockets;
3031

3132
private IFeatureCollection _features;
3233
private int _cachedFeaturesRevision = -1;
@@ -49,15 +50,33 @@ void IFeatureCache.CheckFeaturesRevision()
4950
{
5051
if (_cachedFeaturesRevision !=_features.Revision)
5152
{
52-
_items = null;
53-
_serviceProviders = null;
54-
_authentication = null;
55-
_lifetime = null;
56-
_session = null;
57-
_cachedFeaturesRevision = _features.Revision;
53+
ResetFeatures();
5854
}
5955
}
6056

57+
public void ReplaceFeatures(IFeatureCollection features)
58+
{
59+
_features = features;
60+
ResetFeatures();
61+
62+
_request.ReplaceFeatures(features);
63+
_response.ReplaceFeatures(features);
64+
65+
_authenticationManager?.ReplaceFeatures(features);
66+
_connection?.ReplaceFeatures(features);
67+
_websockets?.ReplaceFeatures(features);
68+
}
69+
70+
private void ResetFeatures()
71+
{
72+
_items = null;
73+
_serviceProviders = null;
74+
_authentication = null;
75+
_lifetime = null;
76+
_session = null;
77+
_cachedFeaturesRevision = _features.Revision;
78+
}
79+
6180
IItemsFeature ItemsFeature
6281
{
6382
get

‎src/Microsoft.AspNet.Http/DefaultHttpRequest.cs

+17-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Microsoft.AspNet.Http.Internal
1414
public class DefaultHttpRequest : HttpRequest, IFeatureCache
1515
{
1616
private readonly DefaultHttpContext _context;
17-
private readonly IFeatureCollection _features;
17+
private IFeatureCollection _features;
1818
private int _cachedFeaturesRevision = -1;
1919

2020
private IHttpRequestFeature _request;
@@ -32,14 +32,25 @@ void IFeatureCache.CheckFeaturesRevision()
3232
{
3333
if (_cachedFeaturesRevision != _features.Revision)
3434
{
35-
_request = null;
36-
_query = null;
37-
_form = null;
38-
_cookies = null;
39-
_cachedFeaturesRevision = _features.Revision;
35+
ResetFeatures();
4036
}
4137
}
4238

39+
public void ReplaceFeatures(IFeatureCollection features)
40+
{
41+
_features = features;
42+
ResetFeatures();
43+
}
44+
45+
private void ResetFeatures()
46+
{
47+
_request = null;
48+
_query = null;
49+
_form = null;
50+
_cookies = null;
51+
_cachedFeaturesRevision = _features.Revision;
52+
}
53+
4354
private IHttpRequestFeature HttpRequestFeature
4455
{
4556
get { return FeatureHelpers.GetAndCache(this, _features, ref _request); }

‎src/Microsoft.AspNet.Http/DefaultHttpResponse.cs

+15-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Microsoft.AspNet.Http.Internal
1313
public class DefaultHttpResponse : HttpResponse, IFeatureCache
1414
{
1515
private readonly DefaultHttpContext _context;
16-
private readonly IFeatureCollection _features;
16+
private IFeatureCollection _features;
1717
private int _cachedFeaturesRevision = -1;
1818

1919
private IHttpResponseFeature _response;
@@ -29,12 +29,23 @@ void IFeatureCache.CheckFeaturesRevision()
2929
{
3030
if (_cachedFeaturesRevision != _features.Revision)
3131
{
32-
_response = null;
33-
_cookies = null;
34-
_cachedFeaturesRevision = _features.Revision;
32+
ResetFeatures();
3533
}
3634
}
3735

36+
public void ReplaceFeatures(IFeatureCollection features)
37+
{
38+
_features = features;
39+
ResetFeatures();
40+
}
41+
42+
private void ResetFeatures()
43+
{
44+
_response = null;
45+
_cookies = null;
46+
_cachedFeaturesRevision = _features.Revision;
47+
}
48+
3849
private IHttpResponseFeature HttpResponseFeature
3950
{
4051
get { return FeatureHelpers.GetAndCache(this, _features, ref _response); }

‎src/Microsoft.AspNet.Http/DefaultWebSocketManager.cs

+14-3
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,23 @@ void IFeatureCache.CheckFeaturesRevision()
2727
{
2828
if (_cachedFeaturesRevision != _features.Revision)
2929
{
30-
_request = null;
31-
_webSockets = null;
32-
_cachedFeaturesRevision = _features.Revision;
30+
ResetFeatures();
3331
}
3432
}
3533

34+
public void ReplaceFeatures(IFeatureCollection features)
35+
{
36+
_features = features;
37+
ResetFeatures();
38+
}
39+
40+
private void ResetFeatures()
41+
{
42+
_request = null;
43+
_webSockets = null;
44+
_cachedFeaturesRevision = _features.Revision;
45+
}
46+
3647
private IHttpRequestFeature HttpRequestFeature
3748
{
3849
get { return FeatureHelpers.GetAndCache(this, _features, ref _request); }

‎src/Microsoft.AspNet.Http/Features/IFeatureCache.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33

44
namespace Microsoft.AspNet.Http.Features
55
{
6-
internal interface IFeatureCache
6+
public interface IFeatureCache
77
{
88
void CheckFeaturesRevision();
9+
void ReplaceFeatures(IFeatureCollection features);
910
}
1011
}

‎src/Microsoft.AspNet.Http/Features/QueryFeature.cs

+15-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Microsoft.AspNet.Http.Features.Internal
99
{
1010
public class QueryFeature : IQueryFeature, IFeatureCache
1111
{
12-
private readonly IFeatureCollection _features;
12+
private IFeatureCollection _features;
1313
private int _cachedFeaturesRevision = -1;
1414

1515
private IHttpRequestFeature _request;
@@ -41,11 +41,23 @@ void IFeatureCache.CheckFeaturesRevision()
4141
{
4242
if (_cachedFeaturesRevision != _features.Revision)
4343
{
44-
_request = null;
45-
_cachedFeaturesRevision = _features.Revision;
44+
ResetFeatures();
4645
}
4746
}
4847

48+
public void ReplaceFeatures(IFeatureCollection features)
49+
{
50+
_features = features;
51+
ResetFeatures();
52+
}
53+
54+
private void ResetFeatures()
55+
{
56+
_request = null;
57+
_parsedValues = null;
58+
_cachedFeaturesRevision = _features.Revision;
59+
}
60+
4961
private IHttpRequestFeature HttpRequestFeature
5062
{
5163
get { return FeatureHelpers.GetAndCache(this, _features, ref _request); }

‎src/Microsoft.AspNet.Http/Features/RequestCookiesFeature.cs

+15-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Http.Features.Internal
1111
{
1212
public class RequestCookiesFeature : IRequestCookiesFeature, IFeatureCache
1313
{
14-
private readonly IFeatureCollection _features;
14+
private IFeatureCollection _features;
1515
private int _cachedFeaturesRevision = -1;
1616

1717
private IHttpRequestFeature _request;
@@ -43,11 +43,23 @@ void IFeatureCache.CheckFeaturesRevision()
4343
{
4444
if (_cachedFeaturesRevision != _features.Revision)
4545
{
46-
_request = null;
47-
_cachedFeaturesRevision = _features.Revision;
46+
ResetFeatures();
4847
}
4948
}
5049

50+
public void ReplaceFeatures(IFeatureCollection features)
51+
{
52+
_features = features;
53+
ResetFeatures();
54+
}
55+
56+
private void ResetFeatures()
57+
{
58+
_request = null;
59+
_parsedValues = null;
60+
_cachedFeaturesRevision = _features.Revision;
61+
}
62+
5163
private IHttpRequestFeature HttpRequestFeature
5264
{
5365
get { return FeatureHelpers.GetAndCache(this, _features, ref _request); }

‎src/Microsoft.AspNet.Http/Features/ResponseCookiesFeature.cs

+15-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Microsoft.AspNet.Http.Features.Internal
77
{
88
public class ResponseCookiesFeature : IResponseCookiesFeature, IFeatureCache
99
{
10-
private readonly IFeatureCollection _features;
10+
private IFeatureCollection _features;
1111
private int _cachedFeaturesRevision = -1;
1212

1313
private IHttpResponseFeature _response;
@@ -22,11 +22,23 @@ void IFeatureCache.CheckFeaturesRevision()
2222
{
2323
if (_cachedFeaturesRevision != _features.Revision)
2424
{
25-
_response = null;
26-
_cachedFeaturesRevision = _features.Revision;
25+
ResetFeatures();
2726
}
2827
}
2928

29+
public void ReplaceFeatures(IFeatureCollection features)
30+
{
31+
_features = features;
32+
ResetFeatures();
33+
}
34+
35+
private void ResetFeatures()
36+
{
37+
_response = null;
38+
_cookiesCollection = null;
39+
_cachedFeaturesRevision = _features.Revision;
40+
}
41+
3042
private IHttpResponseFeature HttpResponseFeature
3143
{
3244
get { return FeatureHelpers.GetAndCache(this, _features, ref _response); }

0 commit comments

Comments
 (0)
This repository has been archived.