From 9988d5205e6244e444b2e14f597b204c01224364 Mon Sep 17 00:00:00 2001 From: Levi B Date: Thu, 5 Mar 2015 14:37:40 -0800 Subject: [PATCH] GetXyzEncoder() shouldn't throw if IServiceProvider is null Also remove dependency on full DI; use Interfaces instead --- .../EncoderServiceProviderExtensions.cs | 13 ++++++------- .../EncoderServices.cs | 13 +++++-------- src/Microsoft.Framework.WebEncoders/project.json | 2 +- .../project.json | 1 + 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.Framework.WebEncoders/EncoderServiceProviderExtensions.cs b/src/Microsoft.Framework.WebEncoders/EncoderServiceProviderExtensions.cs index a7982bdf7a..97a04d1c66 100644 --- a/src/Microsoft.Framework.WebEncoders/EncoderServiceProviderExtensions.cs +++ b/src/Microsoft.Framework.WebEncoders/EncoderServiceProviderExtensions.cs @@ -3,7 +3,6 @@ using System; using Microsoft.Framework.DependencyInjection; -using Microsoft.Framework.Internal; namespace Microsoft.Framework.WebEncoders { @@ -19,9 +18,9 @@ namespace Microsoft.Framework.WebEncoders /// This method is guaranteed never to return null. /// It will return a default encoder instance if the service provider does not contain one. /// - public static IHtmlEncoder GetHtmlEncoder([NotNull] this IServiceProvider serviceProvider) + public static IHtmlEncoder GetHtmlEncoder(this IServiceProvider serviceProvider) { - return serviceProvider.GetService() ?? HtmlEncoder.Default; + return serviceProvider?.GetService() ?? HtmlEncoder.Default; } /// @@ -31,9 +30,9 @@ namespace Microsoft.Framework.WebEncoders /// This method is guaranteed never to return null. /// It will return a default encoder instance if the service provider does not contain one. /// - public static IJavaScriptStringEncoder GetJavaScriptStringEncoder([NotNull] this IServiceProvider serviceProvider) + public static IJavaScriptStringEncoder GetJavaScriptStringEncoder(this IServiceProvider serviceProvider) { - return serviceProvider.GetService() ?? JavaScriptStringEncoder.Default; + return serviceProvider?.GetService() ?? JavaScriptStringEncoder.Default; } /// @@ -43,9 +42,9 @@ namespace Microsoft.Framework.WebEncoders /// This method is guaranteed never to return null. /// It will return a default encoder instance if the service provider does not contain one. /// - public static IUrlEncoder GetUrlEncoder([NotNull] this IServiceProvider serviceProvider) + public static IUrlEncoder GetUrlEncoder(this IServiceProvider serviceProvider) { - return serviceProvider.GetService() ?? UrlEncoder.Default; + return serviceProvider?.GetService() ?? UrlEncoder.Default; } } } diff --git a/src/Microsoft.Framework.WebEncoders/EncoderServices.cs b/src/Microsoft.Framework.WebEncoders/EncoderServices.cs index a19116daf2..d7759f5134 100644 --- a/src/Microsoft.Framework.WebEncoders/EncoderServices.cs +++ b/src/Microsoft.Framework.WebEncoders/EncoderServices.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using Microsoft.Framework.DependencyInjection; using Microsoft.Framework.OptionsModel; @@ -9,17 +10,13 @@ namespace Microsoft.Framework.WebEncoders { public static class EncoderServices { - public static IServiceCollection GetDefaultServices() + public static IEnumerable GetDefaultServices() { - var services = new ServiceCollection(); - // Register the default encoders // We want to call the 'Default' property getters lazily since they perform static caching - services.AddSingleton(CreateFactory(() => HtmlEncoder.Default, filter => new HtmlEncoder(filter))); - services.AddSingleton(CreateFactory(() => JavaScriptStringEncoder.Default, filter => new JavaScriptStringEncoder(filter))); - services.AddSingleton(CreateFactory(() => UrlEncoder.Default, filter => new UrlEncoder(filter))); - - return services; + yield return ServiceDescriptor.Singleton(CreateFactory(() => HtmlEncoder.Default, filter => new HtmlEncoder(filter))); + yield return ServiceDescriptor.Singleton(CreateFactory(() => JavaScriptStringEncoder.Default, filter => new JavaScriptStringEncoder(filter))); + yield return ServiceDescriptor.Singleton(CreateFactory(() => UrlEncoder.Default, filter => new UrlEncoder(filter))); } private static Func CreateFactory(Func defaultFactory, Func customFilterFactory) diff --git a/src/Microsoft.Framework.WebEncoders/project.json b/src/Microsoft.Framework.WebEncoders/project.json index 34f87f5fe2..0c83429959 100644 --- a/src/Microsoft.Framework.WebEncoders/project.json +++ b/src/Microsoft.Framework.WebEncoders/project.json @@ -5,7 +5,7 @@ "allowUnsafe": true }, "dependencies": { - "Microsoft.Framework.DependencyInjection": "1.0.0-*", + "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-*", "Microsoft.Framework.OptionsModel": "1.0.0-*", "Microsoft.Framework.NotNullAttribute.Internal": { "type": "build", "version": "1.0.0-*" } }, diff --git a/test/Microsoft.Framework.WebEncoders.Tests/project.json b/test/Microsoft.Framework.WebEncoders.Tests/project.json index e4e4d9f445..33115bacc1 100644 --- a/test/Microsoft.Framework.WebEncoders.Tests/project.json +++ b/test/Microsoft.Framework.WebEncoders.Tests/project.json @@ -1,5 +1,6 @@ { "dependencies": { + "Microsoft.Framework.DependencyInjection": "1.0.0-*", "Microsoft.Framework.WebEncoders": "1.0.0-*", "Moq": "4.2.1312.1622", "Newtonsoft.Json": "6.0.6",