Setting IHttpContextAccessor in CreateHttpContext #405

This commit is contained in:
John Luo 2015-10-21 16:14:01 -07:00
parent 0394987271
commit b72f95bdb5
3 changed files with 27 additions and 5 deletions

View File

@ -9,9 +9,18 @@ namespace Microsoft.AspNet.Hosting.Builder
{
public class HttpContextFactory : IHttpContextFactory
{
private IHttpContextAccessor _httpContextAccessor;
public HttpContextFactory(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public HttpContext CreateHttpContext(IFeatureCollection featureCollection)
{
return new DefaultHttpContext(featureCollection);
var httpContext = new DefaultHttpContext(featureCollection);
_httpContextAccessor.HttpContext = httpContext;
return httpContext;
}
}
}

View File

@ -87,7 +87,6 @@ namespace Microsoft.AspNet.Hosting.Internal
var logger = _applicationServices.GetRequiredService<ILogger<HostingEngine>>();
var contextFactory = _applicationServices.GetRequiredService<IHttpContextFactory>();
var contextAccessor = _applicationServices.GetRequiredService<IHttpContextAccessor>();
var diagnosticSource = _applicationServices.GetRequiredService<DiagnosticSource>();
var server = ServerFactory.Start(_serverFeatures,
async features =>
@ -95,7 +94,6 @@ namespace Microsoft.AspNet.Hosting.Internal
var httpContext = contextFactory.CreateHttpContext(features);
httpContext.ApplicationServices = _applicationServices;
var requestIdentifier = GetRequestIdentifier(httpContext);
contextAccessor.HttpContext = httpContext;
if (diagnosticSource.IsEnabled("Microsoft.AspNet.Hosting.BeginRequest"))
{
diagnosticSource.Write("Microsoft.AspNet.Hosting.BeginRequest", new { httpContext = httpContext });

View File

@ -4,6 +4,7 @@
using System.Collections.Generic;
using Microsoft.AspNet.Hosting.Builder;
using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Http.Internal;
using Microsoft.AspNet.Owin;
using Xunit;
@ -11,13 +12,27 @@ namespace Microsoft.AspNet.Hosting.Tests
{
public class HttpContextFactoryFacts
{
[Fact]
public void CreateHttpContextSetsHttpContextAccessor()
{
// Arrange
var accessor = new HttpContextAccessor();
var contextFactory = new HttpContextFactory(accessor);
// Act
var context = contextFactory.CreateHttpContext(new FeatureCollection());
// Assert
Assert.True(ReferenceEquals(context, accessor.HttpContext));
}
[Fact]
public void Mutable_FeatureCollection_Wrapped_For_OwinFeatureCollection()
{
var env = new Dictionary<string, object>();
var contextFactory = new HttpContextFactory();
var contextFactory = new HttpContextFactory(new HttpContextAccessor());
var context = contextFactory.CreateHttpContext(new FeatureCollection(new OwinFeatureCollection(env)));
// Setting a feature will throw if the above feature collection is not wrapped in a mutable feature collection.
context.Features.Set<ICustomFeature>(new CustomFeature(100));
Assert.Equal(100, context.Features.Get<ICustomFeature>().Value);