React to Options change

This commit is contained in:
Ryan Brandenburg 2018-01-22 12:41:33 -08:00 committed by Pranav K
parent ebdb3c650a
commit ea14942525
2 changed files with 155 additions and 303 deletions

View File

@ -5,74 +5,74 @@
<PropertyGroup Label="Package Versions">
<BenchmarkDotNetPackageVersion>0.10.11</BenchmarkDotNetPackageVersion>
<InternalAspNetCoreSdkPackageVersion>2.1.0-preview1-15678</InternalAspNetCoreSdkPackageVersion>
<MicrosoftAspNetCoreAntiforgeryPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreAntiforgeryPackageVersion>
<MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>
<MicrosoftAspNetCoreAuthenticationCorePackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreAuthenticationCorePackageVersion>
<MicrosoftAspNetCoreAuthenticationPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreAuthenticationPackageVersion>
<MicrosoftAspNetCoreAuthorizationPolicyPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreAuthorizationPolicyPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreChunkingCookieManagerSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreChunkingCookieManagerSourcesPackageVersion>
<MicrosoftAspNetCoreCookiePolicyPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreCookiePolicyPackageVersion>
<MicrosoftAspNetCoreCorsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreCorsPackageVersion>
<MicrosoftAspNetCoreDiagnosticsAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreDiagnosticsAbstractionsPackageVersion>
<MicrosoftAspNetCoreDiagnosticsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreDiagnosticsPackageVersion>
<MicrosoftAspNetCoreHostingAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreHostingAbstractionsPackageVersion>
<MicrosoftAspNetCoreHostingPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreHostingPackageVersion>
<MicrosoftAspNetCoreHtmlAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreHtmlAbstractionsPackageVersion>
<MicrosoftAspNetCoreHttpExtensionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreHttpExtensionsPackageVersion>
<MicrosoftAspNetCoreHttpPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreHttpPackageVersion>
<MicrosoftAspNetCoreJsonPatchPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreJsonPatchPackageVersion>
<MicrosoftAspNetCoreLocalizationPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreLocalizationPackageVersion>
<MicrosoftAspNetCoreLocalizationRoutingPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreLocalizationRoutingPackageVersion>
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRangeHelperSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreRangeHelperSourcesPackageVersion>
<MicrosoftAspNetCoreRazorDesignPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreRazorDesignPackageVersion>
<MicrosoftAspNetCoreRazorRuntimePackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreRazorRuntimePackageVersion>
<MicrosoftAspNetCoreRazorTagHelpersTestingSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreRazorTagHelpersTestingSourcesPackageVersion>
<MicrosoftAspNetCoreResponseCachingAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreResponseCachingAbstractionsPackageVersion>
<MicrosoftAspNetCoreResponseCachingPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreResponseCachingPackageVersion>
<MicrosoftAspNetCoreRoutingAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreRoutingAbstractionsPackageVersion>
<MicrosoftAspNetCoreRoutingPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreRoutingPackageVersion>
<MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreServerKestrelPackageVersion>
<MicrosoftAspNetCoreSessionPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreSessionPackageVersion>
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreStaticFilesPackageVersion>
<MicrosoftAspNetCoreTestHostPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreTestHostPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftAspNetCoreWebUtilitiesPackageVersion>2.1.0-preview1-28124</MicrosoftAspNetCoreWebUtilitiesPackageVersion>
<MicrosoftAspNetCoreAntiforgeryPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreAntiforgeryPackageVersion>
<MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>
<MicrosoftAspNetCoreAuthenticationCorePackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreAuthenticationCorePackageVersion>
<MicrosoftAspNetCoreAuthenticationPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreAuthenticationPackageVersion>
<MicrosoftAspNetCoreAuthorizationPolicyPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreAuthorizationPolicyPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreChunkingCookieManagerSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreChunkingCookieManagerSourcesPackageVersion>
<MicrosoftAspNetCoreCookiePolicyPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreCookiePolicyPackageVersion>
<MicrosoftAspNetCoreCorsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreCorsPackageVersion>
<MicrosoftAspNetCoreDiagnosticsAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreDiagnosticsAbstractionsPackageVersion>
<MicrosoftAspNetCoreDiagnosticsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreDiagnosticsPackageVersion>
<MicrosoftAspNetCoreHostingAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreHostingAbstractionsPackageVersion>
<MicrosoftAspNetCoreHostingPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreHostingPackageVersion>
<MicrosoftAspNetCoreHtmlAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreHtmlAbstractionsPackageVersion>
<MicrosoftAspNetCoreHttpExtensionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreHttpExtensionsPackageVersion>
<MicrosoftAspNetCoreHttpPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreHttpPackageVersion>
<MicrosoftAspNetCoreJsonPatchPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreJsonPatchPackageVersion>
<MicrosoftAspNetCoreLocalizationPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreLocalizationPackageVersion>
<MicrosoftAspNetCoreLocalizationRoutingPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreLocalizationRoutingPackageVersion>
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRangeHelperSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreRangeHelperSourcesPackageVersion>
<MicrosoftAspNetCoreRazorDesignPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreRazorDesignPackageVersion>
<MicrosoftAspNetCoreRazorRuntimePackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreRazorRuntimePackageVersion>
<MicrosoftAspNetCoreRazorTagHelpersTestingSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreRazorTagHelpersTestingSourcesPackageVersion>
<MicrosoftAspNetCoreResponseCachingAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreResponseCachingAbstractionsPackageVersion>
<MicrosoftAspNetCoreResponseCachingPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreResponseCachingPackageVersion>
<MicrosoftAspNetCoreRoutingAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreRoutingAbstractionsPackageVersion>
<MicrosoftAspNetCoreRoutingPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreRoutingPackageVersion>
<MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreServerKestrelPackageVersion>
<MicrosoftAspNetCoreSessionPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreSessionPackageVersion>
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreStaticFilesPackageVersion>
<MicrosoftAspNetCoreTestHostPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreTestHostPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftAspNetCoreWebUtilitiesPackageVersion>2.1.0-preview1-28137</MicrosoftAspNetCoreWebUtilitiesPackageVersion>
<MicrosoftAspNetWebApiClientPackageVersion>5.2.4-preview1</MicrosoftAspNetWebApiClientPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>2.6.1</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>2.6.1</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>2.1.0-preview1-28124</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsClosedGenericMatcherSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsClosedGenericMatcherSourcesPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsCopyOnWriteDictionarySourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsCopyOnWriteDictionarySourcesPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>2.1.0-preview1-28137</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsClosedGenericMatcherSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsClosedGenericMatcherSourcesPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsCopyOnWriteDictionarySourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsCopyOnWriteDictionarySourcesPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDependencyModelPackageVersion>2.1.0-preview2-25711-01</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsObjectMethodExecutorSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsObjectMethodExecutorSourcesPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsPropertyActivatorSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsPropertyActivatorSourcesPackageVersion>
<MicrosoftExtensionsPropertyHelperSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsPropertyHelperSourcesPackageVersion>
<MicrosoftExtensionsSecurityHelperSourcesPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsSecurityHelperSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>2.1.0-preview1-28124</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsObjectMethodExecutorSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsObjectMethodExecutorSourcesPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsPropertyActivatorSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsPropertyActivatorSourcesPackageVersion>
<MicrosoftExtensionsPropertyHelperSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsPropertyHelperSourcesPackageVersion>
<MicrosoftExtensionsSecurityHelperSourcesPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsSecurityHelperSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>2.1.0-preview1-28137</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion>
<MicrosoftNETCoreApp21PackageVersion>2.1.0-preview1-26115-03</MicrosoftNETCoreApp21PackageVersion>
<MicrosoftNetHttpHeadersPackageVersion>2.1.0-preview1-28124</MicrosoftNetHttpHeadersPackageVersion>
<MicrosoftNetHttpHeadersPackageVersion>2.1.0-preview1-28137</MicrosoftNetHttpHeadersPackageVersion>
<MicrosoftNETTestSdkPackageVersion>15.3.0</MicrosoftNETTestSdkPackageVersion>
<MoqPackageVersion>4.7.49</MoqPackageVersion>
<NewtonsoftJsonBsonPackageVersion>1.0.1</NewtonsoftJsonBsonPackageVersion>

View File

@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.Encodings.Web;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.DependencyInjection;
@ -30,30 +31,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Internal
setupAction: null);
// Assert
Assert.Collection(collection,
service =>
{
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), service.ServiceType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizerFactory), service.ServiceType);
Assert.Equal(typeof(HtmlLocalizerFactory), service.ImplementationType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizer<>), service.ServiceType);
Assert.Equal(typeof(HtmlLocalizer<>), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IViewLocalizer), service.ServiceType);
Assert.Equal(typeof(ViewLocalizer), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
});
AssertContainsSingle(collection, typeof(IHtmlLocalizerFactory), typeof(HtmlLocalizerFactory));
AssertContainsSingle(collection, typeof(IHtmlLocalizer<>), typeof(HtmlLocalizer<>));
AssertContainsSingle(collection, typeof(IViewLocalizer), typeof(ViewLocalizer));
}
[Fact]
@ -61,264 +41,136 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Internal
{
// Arrange
var collection = new ServiceCollection();
var testEncoder = new HtmlTestEncoder();
// Act
collection.Add(ServiceDescriptor.Singleton(typeof(IHtmlLocalizerFactory), typeof(TestHtmlLocalizerFactory)));
collection.Add(ServiceDescriptor.Transient(typeof(IHtmlLocalizer<>), typeof(TestHtmlLocalizer<>)));
collection.Add(ServiceDescriptor.Transient(typeof(IViewLocalizer), typeof(TestViewLocalizer)));
collection.Add(ServiceDescriptor.Singleton(typeof(HtmlEncoder), testEncoder));
MvcLocalizationServices.AddMvcViewLocalizationServices(
collection,
LanguageViewLocationExpanderFormat.Suffix,
setupAction: null);
// Assert
Assert.Collection(collection,
service =>
{
Assert.Equal(typeof(IHtmlLocalizerFactory), service.ServiceType);
Assert.Equal(typeof(TestHtmlLocalizerFactory), service.ImplementationType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizer<>), service.ServiceType);
Assert.Equal(typeof(TestHtmlLocalizer<>), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IViewLocalizer), service.ServiceType);
Assert.Equal(typeof(TestViewLocalizer), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(HtmlEncoder), service.ServiceType);
Assert.Same(testEncoder, service.ImplementationInstance);
},
service =>
{
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), service.ServiceType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
});
AssertContainsSingle(collection, typeof(IHtmlLocalizerFactory), typeof(TestHtmlLocalizerFactory));
AssertContainsSingle(collection, typeof(IHtmlLocalizer<>), typeof(TestHtmlLocalizer<>));
AssertContainsSingle(collection, typeof(IViewLocalizer), typeof(TestViewLocalizer));
}
[Fact]
public void AddCustomLocalizers_AfterAddLocalizationServices_AddsNeededServices()
private void AssertContainsSingle(
IServiceCollection services,
Type serviceType,
Type implementationType)
{
// Arrange
var collection = new ServiceCollection();
var htmlEncoder = new HtmlTestEncoder();
var matches = services
.Where(sd =>
sd.ServiceType == serviceType &&
sd.ImplementationType == implementationType)
.ToArray();
collection.Configure<RazorViewEngineOptions>(options =>
if (matches.Length == 0)
{
options.ViewLocationExpanders.Add(new CustomPartialDirectoryViewLocationExpander());
});
// Act
MvcLocalizationServices.AddMvcViewLocalizationServices(
collection,
LanguageViewLocationExpanderFormat.Suffix,
setupAction: null);
collection.Add(ServiceDescriptor.Transient(typeof(IHtmlLocalizer<>), typeof(TestHtmlLocalizer<>)));
collection.Add(ServiceDescriptor.Transient(typeof(IHtmlLocalizer), typeof(TestViewLocalizer)));
collection.Add(ServiceDescriptor.Singleton(typeof(HtmlEncoder), htmlEncoder));
// Assert
Assert.Collection(collection,
service =>
{
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), service.ServiceType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), service.ServiceType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizerFactory), service.ServiceType);
Assert.Equal(typeof(HtmlLocalizerFactory), service.ImplementationType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizer<>), service.ServiceType);
Assert.Equal(typeof(HtmlLocalizer<>), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IViewLocalizer), service.ServiceType);
Assert.Equal(typeof(ViewLocalizer), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizer<>), service.ServiceType);
Assert.Equal(typeof(TestHtmlLocalizer<>), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizer), service.ServiceType);
Assert.Equal(typeof(TestViewLocalizer), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(HtmlEncoder), service.ServiceType);
Assert.Same(htmlEncoder, service.ImplementationInstance);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
});
Assert.True(
false,
$"Could not find an instance of {implementationType} registered as {serviceType}");
}
else if (matches.Length > 1)
{
Assert.True(
false,
$"Found multiple instances of {implementationType} registered as {serviceType}");
}
}
[Fact]
public void AddLocalizationServicesWithLocalizationOptions_AddsNeededServices()
public class TestViewLocalizer : IViewLocalizer
{
// Arrange
var collection = new ServiceCollection();
public LocalizedHtmlString this[string name]
{
get
{
throw new NotImplementedException();
}
}
// Act
MvcLocalizationServices.AddMvcViewLocalizationServices(
collection,
LanguageViewLocationExpanderFormat.Suffix,
options => options.ResourcesPath = "Resources");
public LocalizedHtmlString this[string name, params object[] arguments]
{
get
{
throw new NotImplementedException();
}
}
// Assert
Assert.Collection(collection,
service =>
{
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), service.ServiceType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizerFactory), service.ServiceType);
Assert.Equal(typeof(HtmlLocalizerFactory), service.ImplementationType);
Assert.Equal(ServiceLifetime.Singleton, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IHtmlLocalizer<>), service.ServiceType);
Assert.Equal(typeof(HtmlLocalizer<>), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
},
service =>
{
Assert.Equal(typeof(IViewLocalizer), service.ServiceType);
Assert.Equal(typeof(ViewLocalizer), service.ImplementationType);
Assert.Equal(ServiceLifetime.Transient, service.Lifetime);
});
}
}
public LocalizedString GetString(string name)
{
throw new NotImplementedException();
}
public class TestViewLocalizer : IViewLocalizer
{
public LocalizedHtmlString this[string name]
{
get
public LocalizedString GetString(string name, params object[] arguments)
{
throw new NotImplementedException();
}
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures)
{
throw new NotImplementedException();
}
public IHtmlLocalizer WithCulture(CultureInfo culture)
{
throw new NotImplementedException();
}
}
public LocalizedHtmlString this[string name, params object[] arguments]
public class TestHtmlLocalizer<HomeController> : IHtmlLocalizer<HomeController>
{
get
public LocalizedHtmlString this[string name]
{
get
{
throw new NotImplementedException();
}
}
public LocalizedHtmlString this[string name, params object[] arguments]
{
get
{
throw new NotImplementedException();
}
}
public LocalizedString GetString(string name)
{
throw new NotImplementedException();
}
public LocalizedString GetString(string name, params object[] arguments)
{
throw new NotImplementedException();
}
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures)
{
throw new NotImplementedException();
}
public IHtmlLocalizer WithCulture(CultureInfo culture)
{
throw new NotImplementedException();
}
}
public LocalizedString GetString(string name)
public class TestHtmlLocalizerFactory : IHtmlLocalizerFactory
{
throw new NotImplementedException();
}
public LocalizedString GetString(string name, params object[] arguments)
{
throw new NotImplementedException();
}
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures)
{
throw new NotImplementedException();
}
public IHtmlLocalizer WithCulture(CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class TestHtmlLocalizer<HomeController> : IHtmlLocalizer<HomeController>
{
public LocalizedHtmlString this[string name]
{
get
public IHtmlLocalizer Create(Type resourceSource)
{
throw new NotImplementedException();
}
}
public LocalizedHtmlString this[string name, params object[] arguments]
{
get
public IHtmlLocalizer Create(string baseName, string location)
{
throw new NotImplementedException();
}
}
public LocalizedString GetString(string name)
{
throw new NotImplementedException();
}
public LocalizedString GetString(string name, params object[] arguments)
{
throw new NotImplementedException();
}
public IEnumerable<LocalizedString> GetAllStrings(bool includeParentCultures)
{
throw new NotImplementedException();
}
public IHtmlLocalizer WithCulture(CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class TestHtmlLocalizerFactory : IHtmlLocalizerFactory
{
public IHtmlLocalizer Create(Type resourceSource)
{
throw new NotImplementedException();
}
public IHtmlLocalizer Create(string baseName, string location)
{
throw new NotImplementedException();
}
}
public class CustomPartialDirectoryViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
throw new NotImplementedException();
}
public void PopulateValues(ViewLocationExpanderContext context)
{
}
}
}