Add helper to register IHttpContextAccessor (#947)

This commit is contained in:
Henk Mollema 2017-10-02 17:31:12 +02:00 committed by Chris Ross
parent b0d91c17f1
commit d6a3c3f83e
3 changed files with 68 additions and 0 deletions

View File

@ -0,0 +1,31 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace Microsoft.Extensions.DependencyInjection
{
/// <summary>
/// Extension methods for configuring HttpContext services.
/// </summary>
public static class HttpServiceCollectionExtensions
{
/// <summary>
/// Adds a default implementation for the <see cref="IHttpContextAccessor"/> service.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <returns>The service collection.</returns>
public static IServiceCollection AddHttpContextAccessor(this IServiceCollection services)
{
if (services == null)
{
throw new ArgumentNullException(nameof(services));
}
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
return services;
}
}
}

View File

@ -0,0 +1,33 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
namespace Microsoft.AspNetCore.Http.Tests
{
public class HttpServiceCollectionExtensionsTests
{
[Fact]
public void AddHttpContextAccessor_AddsWithCorrectLifetime()
{
// Arrange
var services = new ServiceCollection();
// Act
services.AddHttpContextAccessor();
// Assert
var descriptor = services[0];
Assert.Equal(ServiceLifetime.Singleton, descriptor.Lifetime);
Assert.Equal(typeof(HttpContextAccessor), descriptor.ImplementationType);
}
[Fact]
public void AddHttpContextAccessor_ThrowsWithoutServices()
{
Assert.Throws<ArgumentNullException>("services", () => HttpServiceCollectionExtensions.AddHttpContextAccessor(null));
}
}
}

View File

@ -9,4 +9,8 @@
<ProjectReference Include="..\..\src\Microsoft.AspNetCore.Http\Microsoft.AspNetCore.Http.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
</ItemGroup>
</Project>