diff --git a/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs b/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs index 05ee6e9f7e..d68dc0fd80 100644 --- a/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs +++ b/src/Microsoft.Extensions.Localization/LocalizationServiceCollectionExtensions.cs @@ -1,5 +1,5 @@ -// 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. +// 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.Extensions; @@ -25,15 +25,16 @@ namespace Microsoft.Extensions.DependencyInjection services.AddOptions(); - services.TryAddSingleton(); - services.TryAddTransient(typeof(IStringLocalizer<>), typeof(StringLocalizer<>)); + AddLocalizationServices(services); } /// /// Adds services required for application localization. /// /// The to add the services to. - /// An to configure the . + /// + /// An to configure the . + /// public static void AddLocalization( this IServiceCollection services, Action setupAction) @@ -42,12 +43,27 @@ namespace Microsoft.Extensions.DependencyInjection { throw new ArgumentNullException(nameof(services)); } + if (setupAction == null) { throw new ArgumentNullException(nameof(setupAction)); } - services.AddLocalization(); + AddLocalizationServices(services, setupAction); + } + + // To enable unit testing + internal static void AddLocalizationServices(IServiceCollection services) + { + services.TryAddSingleton(); + services.TryAddTransient(typeof(IStringLocalizer<>), typeof(StringLocalizer<>)); + } + + internal static void AddLocalizationServices( + IServiceCollection services, + Action setupAction) + { + AddLocalizationServices(services); services.Configure(setupAction); } } diff --git a/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs b/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs index 804c8971b5..24ba3c7ad9 100644 --- a/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs +++ b/test/Microsoft.Extensions.Localization.Tests/LocalizationServiceCollectionExtensionsTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// 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.Linq; @@ -17,7 +17,7 @@ namespace Microsoft.Extensions.Localization.Test var collection = new ServiceCollection(); // Act - collection.AddLocalization(); + LocalizationServiceCollectionExtensions.AddLocalizationServices(collection); // Assert var services = collection.ToList(); @@ -39,7 +39,9 @@ namespace Microsoft.Extensions.Localization.Test var collection = new ServiceCollection(); // Act - collection.AddLocalization(options => options.ResourcesPath = "Resources"); + LocalizationServiceCollectionExtensions.AddLocalizationServices( + collection, + options => options.ResourcesPath = "Resources"); // Assert var services = collection.ToList();