WIP - have added LightInject as a fast and tiny IoC container that is embedded. Have updated all required SingleObjectResolverBase and non lazy ManyObjectResolverBase to use a Container implementation. Have updated the boot managers to use IoC to instantiate all their requirements. This is so much nicer now by using IoC to ctor all of the objects in these resolvers we can get ctor injection OOTB so no more singletons. Need to create resolver to support the lazy resolver with IoC next. Updated IContentFinders, IThumbnailProviders to use ctor injection.

This commit is contained in:
Shannon
2015-01-21 12:48:08 +11:00
parent 215113d635
commit 13a4d5c81c
65 changed files with 9433 additions and 1174 deletions

View File

@@ -5,6 +5,7 @@ using System.IO;
using System.Linq;
using System.Globalization;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
namespace Umbraco.Core.Strings
{
@@ -18,10 +19,13 @@ namespace Umbraco.Core.Strings
/// </remarks>
public class DefaultShortStringHelper : IShortStringHelper
{
private readonly IUmbracoSettingsSection _settings;
#region Ctor and vars
public DefaultShortStringHelper()
public DefaultShortStringHelper(IUmbracoSettingsSection settings)
{
_settings = settings;
InitializeLegacyUrlReplaceCharacters();
}
@@ -57,7 +61,7 @@ namespace Umbraco.Core.Strings
private void InitializeLegacyUrlReplaceCharacters()
{
foreach (var node in UmbracoConfig.For.UmbracoSettings().RequestHandler.CharCollection)
foreach (var node in _settings.RequestHandler.CharCollection)
{
if(string.IsNullOrEmpty(node.Char) == false)
_urlReplaceCharacters[node.Char] = node.Replacement;
@@ -146,7 +150,7 @@ namespace Umbraco.Core.Strings
PreFilter = ApplyUrlReplaceCharacters,
PostFilter = x => CutMaxLength(x, 240),
IsTerm = (c, leading) => char.IsLetterOrDigit(c) || c == '_', // letter, digit or underscore
StringType = (UmbracoConfig.For.UmbracoSettings().RequestHandler.ConvertUrlsToAscii ? CleanStringType.Ascii : CleanStringType.Utf8) | CleanStringType.LowerCase,
StringType = (_settings.RequestHandler.ConvertUrlsToAscii ? CleanStringType.Ascii : CleanStringType.Utf8) | CleanStringType.LowerCase,
BreakTermsOnUpper = false,
Separator = '-'
}).WithConfig(CleanStringType.FileName, new Config
@@ -323,7 +327,7 @@ function validateSafeAlias(input, value, immediate, callback) {{
public string GetShortStringServicesJavaScript(string controllerPath)
{
return string.Format(SssjsFormat,
UmbracoConfig.For.UmbracoSettings().Content.ForceSafeAliases ? "true" : "false", controllerPath);
_settings.Content.ForceSafeAliases ? "true" : "false", controllerPath);
}
#endregion

View File

@@ -1,12 +1,37 @@
using System;
using System.Linq.Expressions;
using Umbraco.Core.LightInject;
using Umbraco.Core.ObjectResolution;
namespace Umbraco.Core.Strings
{
/// <summary>
/// <summary>
/// Resolves the IShortStringHelper object
/// </summary>
public sealed class ShortStringHelperResolver : SingleObjectResolverBase<ShortStringHelperResolver, IShortStringHelper>
{
/// </summary>
public sealed class ShortStringHelperResolver : ContainerSingleObjectResolver<ShortStringHelperResolver, IShortStringHelper>
{
/// <summary>
/// Initializes the resolver to use IoC
/// </summary>
/// <param name="container"></param>
/// <param name="implementationType"></param>
internal ShortStringHelperResolver(IServiceContainer container, Type implementationType)
: base(container, implementationType)
{
Resolution.Frozen += (sender, args) => Value.Freeze();
}
/// <summary>
/// Initializes the resolver to use IoC
/// </summary>
/// <param name="container"></param>
/// <param name="implementationType"></param>
internal ShortStringHelperResolver(IServiceContainer container, Expression<Func<IServiceFactory, IShortStringHelper>> implementationType)
: base(container, implementationType)
{
Resolution.Frozen += (sender, args) => Value.Freeze();
}
/// <summary>
/// Initializes a new instance of the <see cref="ShortStringHelperResolver"/> class with an instance of a helper.
/// </summary>
@@ -17,24 +42,24 @@ namespace Umbraco.Core.Strings
{
Resolution.Frozen += (sender, args) => Value.Freeze();
}
/// <summary>
/// Sets the helper.
/// </summary>
/// Sets the helper.
/// </summary>
/// <param name="helper">The helper.</param>
/// <remarks>For developers, at application startup.</remarks>
/// <remarks>For developers, at application startup.</remarks>
public void SetHelper(IShortStringHelper helper)
{
{
Value = helper;
}
}
/// <summary>
/// Gets the helper.
/// </summary>
/// <summary>
/// Gets the helper.
/// </summary>
public IShortStringHelper Helper
{
get { return Value; }
}
{
get { return Value; }
}
}
}
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.LightInject;
using Umbraco.Core.Logging;
using Umbraco.Core.ObjectResolution;
@@ -8,28 +9,40 @@ namespace Umbraco.Core.Strings
/// <summary>
/// Resolves IUrlSegmentProvider objects.
/// </summary>
public sealed class UrlSegmentProviderResolver : ManyObjectsResolverBase<UrlSegmentProviderResolver, IUrlSegmentProvider>
public sealed class UrlSegmentProviderResolver : ContainerManyObjectsResolver<UrlSegmentProviderResolver, IUrlSegmentProvider>
{
/// <summary>
/// Initializes a new instance of the <see cref="UrlSegmentProviderResolver"/> class with an initial list of provider types.
/// ONLY for testing
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="logger"></param>
/// <param name="providerTypes"></param>
[Obsolete("Used only for Tests - should remove")]
internal UrlSegmentProviderResolver(IServiceProvider serviceProvider, ILogger logger, params Type[] providerTypes)
: base(serviceProvider, logger, providerTypes)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="UrlSegmentProviderResolver"/> class with an initial list of provider types.
/// </summary>
/// <param name="container"></param>
/// <param name="logger"></param>
/// <param name="providerTypes">The list of provider types.</param>
/// <remarks>The resolver is created by the <c>WebBootManager</c> and thus the constructor remains internal.</remarks>
internal UrlSegmentProviderResolver(IServiceProvider serviceProvider, ILogger logger, IEnumerable<Type> providerTypes)
: base(serviceProvider, logger, providerTypes)
internal UrlSegmentProviderResolver(IServiceContainer container, ILogger logger, IEnumerable<Type> providerTypes)
: base(container, logger, providerTypes)
{ }
/// <summary>
/// Initializes a new instance of the <see cref="UrlSegmentProviderResolver"/> class with an initial list of provider types.
/// </summary>
/// <param name="serviceProvider"></param>
/// <param name="container"></param>
/// <param name="logger"></param>
/// <param name="providerTypes">The list of provider types.</param>
/// <remarks>The resolver is created by the <c>WebBootManager</c> and thus the constructor remains internal.</remarks>
internal UrlSegmentProviderResolver(IServiceProvider serviceProvider, ILogger logger, params Type[] providerTypes)
: base(serviceProvider, logger, providerTypes)
internal UrlSegmentProviderResolver(IServiceContainer container, ILogger logger, params Type[] providerTypes)
: base(container, logger, providerTypes)
{ }
/// <summary>