diff --git a/src/Http/Http.Features/src/FeatureReferences.cs b/src/Http/Http.Features/src/FeatureReferences.cs index 918a77fa9b..54b0472918 100644 --- a/src/Http/Http.Features/src/FeatureReferences.cs +++ b/src/Http/Http.Features/src/FeatureReferences.cs @@ -15,6 +15,20 @@ namespace Microsoft.AspNetCore.Http.Features Revision = collection.Revision; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Initalize(IFeatureCollection collection) + { + Revision = collection.Revision; + Collection = collection; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Initalize(IFeatureCollection collection, int revision) + { + Revision = revision; + Collection = collection; + } + public IFeatureCollection Collection { get; private set; } public int Revision { get; private set; } diff --git a/src/Http/Http/src/DefaultHttpContext.cs b/src/Http/Http/src/DefaultHttpContext.cs index 0135d2d7ab..65166b4e0c 100644 --- a/src/Http/Http/src/DefaultHttpContext.cs +++ b/src/Http/Http/src/DefaultHttpContext.cs @@ -40,18 +40,19 @@ namespace Microsoft.AspNetCore.Http public DefaultHttpContext(IFeatureCollection features) { - _features = new FeatureReferences(features); + _features.Initalize(features); _request = new DefaultHttpRequest(this); _response = new DefaultHttpResponse(this); } public void Initialize(IFeatureCollection features) { - _features = new FeatureReferences(features); - _request.Initialize(); - _response.Initialize(); - _connection?.Initialize(features); - _websockets?.Initialize(features); + var revision = features.Revision; + _features.Initalize(features, revision); + _request.Initialize(revision); + _response.Initialize(revision); + _connection?.Initialize(features, revision); + _websockets?.Initialize(features, revision); } public void Uninitialize() diff --git a/src/Http/Http/src/Features/QueryFeature.cs b/src/Http/Http/src/Features/QueryFeature.cs index 36781ef16e..28af551594 100644 --- a/src/Http/Http/src/Features/QueryFeature.cs +++ b/src/Http/Http/src/Features/QueryFeature.cs @@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Http.Features throw new ArgumentNullException(nameof(features)); } - _features = new FeatureReferences(features); + _features.Initalize(features); } private IHttpRequestFeature HttpRequestFeature => diff --git a/src/Http/Http/src/Features/RequestCookiesFeature.cs b/src/Http/Http/src/Features/RequestCookiesFeature.cs index cd37b360a4..c657a663d4 100644 --- a/src/Http/Http/src/Features/RequestCookiesFeature.cs +++ b/src/Http/Http/src/Features/RequestCookiesFeature.cs @@ -35,7 +35,7 @@ namespace Microsoft.AspNetCore.Http.Features throw new ArgumentNullException(nameof(features)); } - _features = new FeatureReferences(features); + _features.Initalize(features); } private IHttpRequestFeature HttpRequestFeature => diff --git a/src/Http/Http/src/Features/ResponseCookiesFeature.cs b/src/Http/Http/src/Features/ResponseCookiesFeature.cs index 0d9444b0f5..66cb8e86c7 100644 --- a/src/Http/Http/src/Features/ResponseCookiesFeature.cs +++ b/src/Http/Http/src/Features/ResponseCookiesFeature.cs @@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Http.Features throw new ArgumentNullException(nameof(features)); } - _features = new FeatureReferences(features); + _features.Initalize(features); } private IHttpResponseFeature HttpResponseFeature => _features.Fetch(ref _features.Cache, _nullResponseFeature); diff --git a/src/Http/Http/src/Internal/DefaultConnectionInfo.cs b/src/Http/Http/src/Internal/DefaultConnectionInfo.cs index 96a00355ec..b2146e36c4 100644 --- a/src/Http/Http/src/Internal/DefaultConnectionInfo.cs +++ b/src/Http/Http/src/Internal/DefaultConnectionInfo.cs @@ -25,7 +25,12 @@ namespace Microsoft.AspNetCore.Http.Internal public void Initialize( IFeatureCollection features) { - _features = new FeatureReferences(features); + _features.Initalize(features); + } + + public void Initialize(IFeatureCollection features, int revision) + { + _features.Initalize(features, revision); } public void Uninitialize() diff --git a/src/Http/Http/src/Internal/DefaultHttpRequest.cs b/src/Http/Http/src/Internal/DefaultHttpRequest.cs index 55112b687e..70ec3cc43e 100644 --- a/src/Http/Http/src/Internal/DefaultHttpRequest.cs +++ b/src/Http/Http/src/Internal/DefaultHttpRequest.cs @@ -28,12 +28,17 @@ namespace Microsoft.AspNetCore.Http.Internal public DefaultHttpRequest(DefaultHttpContext context) { _context = context; - _features = new FeatureReferences(_context.Features); + _features.Initalize(context.Features); } public void Initialize() { - _features = new FeatureReferences(_context.Features); + _features.Initalize(_context.Features); + } + + public void Initialize(int revision) + { + _features.Initalize(_context.Features, revision); } public void Uninitialize() diff --git a/src/Http/Http/src/Internal/DefaultHttpResponse.cs b/src/Http/Http/src/Internal/DefaultHttpResponse.cs index 6c6068e441..55cbbb4df3 100644 --- a/src/Http/Http/src/Internal/DefaultHttpResponse.cs +++ b/src/Http/Http/src/Internal/DefaultHttpResponse.cs @@ -25,12 +25,17 @@ namespace Microsoft.AspNetCore.Http.Internal public DefaultHttpResponse(DefaultHttpContext context) { _context = context; - _features = new FeatureReferences(_context.Features); + _features.Initalize(context.Features); } public void Initialize() { - _features = new FeatureReferences(_context.Features); + _features.Initalize(_context.Features); + } + + public void Initialize(int revision) + { + _features.Initalize(_context.Features, revision); } public void Uninitialize() diff --git a/src/Http/Http/src/Internal/DefaultWebSocketManager.cs b/src/Http/Http/src/Internal/DefaultWebSocketManager.cs index e704d552e6..34de127724 100644 --- a/src/Http/Http/src/Internal/DefaultWebSocketManager.cs +++ b/src/Http/Http/src/Internal/DefaultWebSocketManager.cs @@ -25,7 +25,12 @@ namespace Microsoft.AspNetCore.Http.Internal public void Initialize(IFeatureCollection features) { - _features = new FeatureReferences(features); + _features.Initalize(features); + } + + public void Initialize(IFeatureCollection features, int revision) + { + _features.Initalize(features, revision); } public void Uninitialize()