Add builder extensions to simplify use of `CookieTempDataProvider`
- #5515
This commit is contained in:
parent
576c0e6a65
commit
6d4361218e
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewComponents;
|
using Microsoft.AspNetCore.Mvc.ViewComponents;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.DependencyInjection
|
namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
|
@ -18,7 +19,9 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
/// Adds configuration of <see cref="MvcViewOptions"/> for the application.
|
/// Adds configuration of <see cref="MvcViewOptions"/> for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
|
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
|
||||||
/// <param name="setupAction">The <see cref="MvcViewOptions"/> which need to be configured.</param>
|
/// <param name="setupAction">
|
||||||
|
/// An <see cref="Action{MvcViewOptions}"/> to configure the provided <see cref="MvcViewOptions"/>.
|
||||||
|
/// </param>
|
||||||
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
|
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
|
||||||
public static IMvcBuilder AddViewOptions(
|
public static IMvcBuilder AddViewOptions(
|
||||||
this IMvcBuilder builder,
|
this IMvcBuilder builder,
|
||||||
|
|
@ -62,5 +65,57 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers <see cref="CookieTempDataProvider"/> as the default <see cref="ITempDataProvider"/> in the
|
||||||
|
/// <see cref="IServiceCollection"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
|
||||||
|
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
|
||||||
|
public static IMvcBuilder AddCookieTempDataProvider(this IMvcBuilder builder)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the TempData basics are registered.
|
||||||
|
MvcViewFeaturesMvcCoreBuilderExtensions.AddViewServices(builder.Services);
|
||||||
|
|
||||||
|
var descriptor = ServiceDescriptor.Singleton(typeof(ITempDataProvider), typeof(CookieTempDataProvider));
|
||||||
|
builder.Services.Replace(descriptor);
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers <see cref="CookieTempDataProvider"/> as the default <see cref="ITempDataProvider"/> in the
|
||||||
|
/// <see cref="IServiceCollection"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IMvcBuilder"/>.</param>
|
||||||
|
/// <param name="setupAction">
|
||||||
|
/// An <see cref="Action{CookieTempDataProviderOptions}"/> to configure the provided
|
||||||
|
/// <see cref="CookieTempDataProviderOptions"/>.
|
||||||
|
/// </param>
|
||||||
|
/// <returns>The <see cref="IMvcBuilder"/>.</returns>
|
||||||
|
public static IMvcBuilder AddCookieTempDataProvider(
|
||||||
|
this IMvcBuilder builder,
|
||||||
|
Action<CookieTempDataProviderOptions> setupAction)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setupAction == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(setupAction));
|
||||||
|
}
|
||||||
|
|
||||||
|
AddCookieTempDataProvider(builder);
|
||||||
|
builder.Services.Configure(setupAction);
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,28 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers <see cref="CookieTempDataProvider"/> as the default <see cref="ITempDataProvider"/> in the
|
||||||
|
/// <see cref="IServiceCollection"/>. Also registers the default view services.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IMvcCoreBuilder"/>.</param>
|
||||||
|
/// <returns>The <see cref="IMvcCoreBuilder"/>.</returns>
|
||||||
|
public static IMvcCoreBuilder AddCookieTempDataProvider(this IMvcCoreBuilder builder)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the TempData basics are registered.
|
||||||
|
AddViewServices(builder.Services);
|
||||||
|
|
||||||
|
var descriptor = ServiceDescriptor.Singleton(typeof(ITempDataProvider), typeof(CookieTempDataProvider));
|
||||||
|
builder.Services.Replace(descriptor);
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
private static void AddViewComponentApplicationPartsProviders(ApplicationPartManager manager)
|
private static void AddViewComponentApplicationPartsProviders(ApplicationPartManager manager)
|
||||||
{
|
{
|
||||||
if (!manager.FeatureProviders.OfType<ViewComponentFeatureProvider>().Any())
|
if (!manager.FeatureProviders.OfType<ViewComponentFeatureProvider>().Any())
|
||||||
|
|
@ -55,14 +77,39 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
throw new ArgumentNullException(nameof(setupAction));
|
throw new ArgumentNullException(nameof(setupAction));
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.AddDataAnnotations();
|
AddViews(builder);
|
||||||
AddViewServices(builder.Services);
|
builder.Services.Configure(setupAction);
|
||||||
|
|
||||||
if (setupAction != null)
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers <see cref="CookieTempDataProvider"/> as the default <see cref="ITempDataProvider"/> in the
|
||||||
|
/// <see cref="IServiceCollection"/>. Also registers the default view services.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">The <see cref="IMvcCoreBuilder"/>.</param>
|
||||||
|
/// <param name="setupAction">
|
||||||
|
/// An <see cref="Action{CookieTempDataProviderOptions}"/> to configure the provided
|
||||||
|
/// <see cref="CookieTempDataProviderOptions"/>.
|
||||||
|
/// </param>
|
||||||
|
/// <returns>The <see cref="IMvcCoreBuilder"/>.</returns>
|
||||||
|
public static IMvcCoreBuilder AddCookieTempDataProvider(
|
||||||
|
this IMvcCoreBuilder builder,
|
||||||
|
Action<CookieTempDataProviderOptions> setupAction)
|
||||||
|
{
|
||||||
|
if (builder == null)
|
||||||
{
|
{
|
||||||
builder.Services.Configure(setupAction);
|
throw new ArgumentNullException(nameof(builder));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setupAction == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(setupAction));
|
||||||
|
}
|
||||||
|
|
||||||
|
AddCookieTempDataProvider(builder);
|
||||||
|
builder.Services.Configure(setupAction);
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
|
@ -28,13 +29,11 @@ using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal;
|
||||||
using Microsoft.AspNetCore.Routing;
|
using Microsoft.AspNetCore.Routing;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
using Microsoft.Extensions.ObjectPool;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Newtonsoft.Json.Serialization;
|
using Newtonsoft.Json.Serialization;
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Microsoft.Extensions.ObjectPool;
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNetCore.Mvc
|
namespace Microsoft.AspNetCore.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -276,6 +275,35 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddMvc_RegistersExpectedTempDataProvider()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
services.AddMvc();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(SessionStateTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddMvc_DoesNotRegisterCookieTempDataOptionsConfiguration()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.DoesNotContain(
|
||||||
|
services,
|
||||||
|
item => item.ServiceType == typeof(IConfigureOptions<CookieTempDataProviderOptions>));
|
||||||
|
}
|
||||||
|
|
||||||
private IEnumerable<Type> SingleRegistrationServiceTypes
|
private IEnumerable<Type> SingleRegistrationServiceTypes
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||||
using Microsoft.AspNetCore.Mvc.Internal;
|
using Microsoft.AspNetCore.Mvc.Internal;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewComponents;
|
using Microsoft.AspNetCore.Mvc.ViewComponents;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.Extensions.DependencyInjection
|
namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
|
@ -35,6 +37,100 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
Assert.Equal(typeof(ServiceBasedViewComponentActivator), descriptor.ImplementationType);
|
Assert.Equal(typeof(ServiceBasedViewComponentActivator), descriptor.ImplementationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_RegistersExpectedTempDataProvider()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_DoesNotRegisterOptionsConfiguration()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.DoesNotContain(
|
||||||
|
services,
|
||||||
|
item => item.ServiceType == typeof(IConfigureOptions<CookieTempDataProviderOptions>));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersExpectedTempDataProvider()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersOptionsConfiguration()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Single(
|
||||||
|
services,
|
||||||
|
item => item.ServiceType == typeof(IConfigureOptions<CookieTempDataProviderOptions>));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_RegistersExpectedTempDataProvider_IfCalledTwice()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersExpectedTempDataProvider_IfCalledTwice()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvc();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void AddViewComponentsAsServices_RegistersDiscoveredViewComponents()
|
public void AddViewComponentsAsServices_RegistersDiscoveredViewComponents()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,186 @@
|
||||||
|
// 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 Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.Extensions.DependencyInjection
|
||||||
|
{
|
||||||
|
public class MvcViewFeaturesMvcCoreBuilderExtensionsTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void AddViews_RegistersExpectedTempDataProvider()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddViews();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(SessionStateTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_RegistersExpectedTempDataProvider()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_DoesNotRegisterOptionsConfiguration()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.DoesNotContain(
|
||||||
|
services,
|
||||||
|
item => item.ServiceType == typeof(IConfigureOptions<CookieTempDataProviderOptions>));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersExpectedTempDataProvider()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersOptionsConfiguration()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Single(
|
||||||
|
services,
|
||||||
|
item => item.ServiceType == typeof(IConfigureOptions<CookieTempDataProviderOptions>));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_RegistersExpectedTempDataProvider_IfCalledBeforeAddViews()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
builder.AddViews();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersExpectedTempDataProvider_IfCalledBeforeAddViews()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
builder.AddViews();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_RegistersExpectedTempDataProvider_IfCalledAfterAddViews()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddViews();
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersExpectedTempDataProvider_IfCalledAfterAddViews()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddViews();
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProvider_RegistersExpectedTempDataProvider_IfCalledTwice()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
builder.AddCookieTempDataProvider();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void AddCookieTempDataProviderWithSetupAction_RegistersExpectedTempDataProvider_IfCalledTwice()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
var builder = services.AddMvcCore();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
builder.AddCookieTempDataProvider(options => { });
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
var descriptor = Assert.Single(services, item => item.ServiceType == typeof(ITempDataProvider));
|
||||||
|
Assert.Equal(typeof(CookieTempDataProvider), descriptor.ImplementationType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|
||||||
namespace BasicWebSite
|
namespace BasicWebSite
|
||||||
|
|
@ -11,8 +10,9 @@ namespace BasicWebSite
|
||||||
{
|
{
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddMvc();
|
services
|
||||||
services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
|
.AddMvc()
|
||||||
|
.AddCookieTempDataProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Configure(IApplicationBuilder app)
|
public void Configure(IApplicationBuilder app)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue