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:
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user