GetXyzEncoder() shouldn't throw if IServiceProvider is null

Also remove dependency on full DI; use Interfaces instead
This commit is contained in:
Levi B 2015-03-05 14:37:40 -08:00
parent d5e1b198dc
commit 9988d5205e
4 changed files with 13 additions and 16 deletions

View File

@ -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.
/// </remarks>
public static IHtmlEncoder GetHtmlEncoder([NotNull] this IServiceProvider serviceProvider)
public static IHtmlEncoder GetHtmlEncoder(this IServiceProvider serviceProvider)
{
return serviceProvider.GetService<IHtmlEncoder>() ?? HtmlEncoder.Default;
return serviceProvider?.GetService<IHtmlEncoder>() ?? HtmlEncoder.Default;
}
/// <summary>
@ -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.
/// </remarks>
public static IJavaScriptStringEncoder GetJavaScriptStringEncoder([NotNull] this IServiceProvider serviceProvider)
public static IJavaScriptStringEncoder GetJavaScriptStringEncoder(this IServiceProvider serviceProvider)
{
return serviceProvider.GetService<IJavaScriptStringEncoder>() ?? JavaScriptStringEncoder.Default;
return serviceProvider?.GetService<IJavaScriptStringEncoder>() ?? JavaScriptStringEncoder.Default;
}
/// <summary>
@ -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.
/// </remarks>
public static IUrlEncoder GetUrlEncoder([NotNull] this IServiceProvider serviceProvider)
public static IUrlEncoder GetUrlEncoder(this IServiceProvider serviceProvider)
{
return serviceProvider.GetService<IUrlEncoder>() ?? UrlEncoder.Default;
return serviceProvider?.GetService<IUrlEncoder>() ?? UrlEncoder.Default;
}
}
}

View File

@ -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<ServiceDescriptor> 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<IHtmlEncoder>(CreateFactory(() => HtmlEncoder.Default, filter => new HtmlEncoder(filter)));
services.AddSingleton<IJavaScriptStringEncoder>(CreateFactory(() => JavaScriptStringEncoder.Default, filter => new JavaScriptStringEncoder(filter)));
services.AddSingleton<IUrlEncoder>(CreateFactory(() => UrlEncoder.Default, filter => new UrlEncoder(filter)));
return services;
yield return ServiceDescriptor.Singleton<IHtmlEncoder>(CreateFactory(() => HtmlEncoder.Default, filter => new HtmlEncoder(filter)));
yield return ServiceDescriptor.Singleton<IJavaScriptStringEncoder>(CreateFactory(() => JavaScriptStringEncoder.Default, filter => new JavaScriptStringEncoder(filter)));
yield return ServiceDescriptor.Singleton<IUrlEncoder>(CreateFactory(() => UrlEncoder.Default, filter => new UrlEncoder(filter)));
}
private static Func<IServiceProvider, T> CreateFactory<T>(Func<T> defaultFactory, Func<ICodePointFilter, T> customFilterFactory)

View File

@ -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-*" }
},

View File

@ -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",