Skip to content
This repository was archived by the owner on Nov 20, 2018. It is now read-only.

Commit 1c04873

Browse files
committed
Allow feature cache to be updated+invalidated
1 parent dfe2d41 commit 1c04873

7 files changed

+106
-39
lines changed

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@ 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;
21-
private IHttpResponseFeature _response;
2221

2322
public DefaultAuthenticationManager(IFeatureCollection features)
2423
{
@@ -29,12 +28,22 @@ void IFeatureCache.CheckFeaturesRevision()
2928
{
3029
if (_cachedFeaturesRevision != _features.Revision)
3130
{
32-
_authentication = null;
33-
_response = null;
34-
_cachedFeaturesRevision = _features.Revision;
31+
ResetFeatures();
3532
}
3633
}
3734

35+
public void UpdateFeatures(IFeatureCollection features)
36+
{
37+
_features = features;
38+
ResetFeatures();
39+
}
40+
41+
private void ResetFeatures()
42+
{
43+
_authentication = null;
44+
_cachedFeaturesRevision = _features.Revision;
45+
}
46+
3847
private IHttpAuthenticationFeature HttpAuthenticationFeature
3948
{
4049
get
@@ -47,11 +56,6 @@ private IHttpAuthenticationFeature HttpAuthenticationFeature
4756
}
4857
}
4958

50-
private IHttpResponseFeature HttpResponseFeature
51-
{
52-
get { return FeatureHelpers.GetAndCache(this, _features, ref _response); }
53-
}
54-
5559
public override IEnumerable<AuthenticationDescription> GetAuthenticationSchemes()
5660
{
5761
var handler = HttpAuthenticationFeature.Handler;

src/Microsoft.AspNet.Http/DefaultConnectionInfo.cs

Lines changed: 15 additions & 4 deletions
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 UpdateFeatures(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

Lines changed: 30 additions & 11 deletions
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 UpdateFeatures(IFeatureCollection features)
58+
{
59+
_features = features;
60+
ResetFeatures();
61+
62+
_request.UpdateFeatures(features);
63+
_response.UpdateFeatures(features);
64+
65+
_authenticationManager?.UpdateFeatures(features);
66+
_connection?.UpdateFeatures(features);
67+
_websockets?.UpdateFeatures(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

Lines changed: 17 additions & 6 deletions
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 UpdateFeatures(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

Lines changed: 15 additions & 4 deletions
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 UpdateFeatures(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

Lines changed: 14 additions & 3 deletions
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 UpdateFeatures(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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace Microsoft.AspNet.Http.Features
55
{
6-
internal interface IFeatureCache
6+
public interface IFeatureCache
77
{
88
void CheckFeaturesRevision();
99
}

0 commit comments

Comments
 (0)