diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index f66ba91a69..7065020ee3 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -477,9 +477,9 @@ namespace Umbraco.Core ShortStringHelperResolver.Current = new ShortStringHelperResolver(Container, factory => new DefaultShortStringHelper(factory.GetInstance()).WithDefaultConfig()); - UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver( - Container, ProfilingLogger.Logger, - typeof(DefaultUrlSegmentProvider)); + // fixme - could register collection with initial values? + Container.RegisterCollection(); + Container.GetInstance().Add(); // by default, no factory is activated PublishedContentModelFactoryResolver.Current = new PublishedContentModelFactoryResolver(Container); diff --git a/src/Umbraco.Core/Current.cs b/src/Umbraco.Core/Current.cs index 568a35578e..84bd8fa9b5 100644 --- a/src/Umbraco.Core/Current.cs +++ b/src/Umbraco.Core/Current.cs @@ -10,5 +10,8 @@ namespace Umbraco.Core internal class Current { public static IServiceContainer Container { get; set; } // ok to set - don't be stupid + + // cannot set - this is temp + public static IEnumerable UrlSegmentProviders => Container.GetInstance().Items; } } diff --git a/src/Umbraco.Core/Strings/UrlSegmentProviderCollection.cs b/src/Umbraco.Core/Strings/UrlSegmentProviderCollection.cs new file mode 100644 index 0000000000..59cdc5d90b --- /dev/null +++ b/src/Umbraco.Core/Strings/UrlSegmentProviderCollection.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Umbraco.Core.DependencyInjection; + +namespace Umbraco.Core.Strings +{ + public class UrlSegmentProviderCollection : InjectCollectionBase + { + public UrlSegmentProviderCollection(IEnumerable items) + : base(items) + { } + } +} diff --git a/src/Umbraco.Core/Strings/UrlSegmentProviderCollectionBuilder.cs b/src/Umbraco.Core/Strings/UrlSegmentProviderCollectionBuilder.cs new file mode 100644 index 0000000000..921aa6716a --- /dev/null +++ b/src/Umbraco.Core/Strings/UrlSegmentProviderCollectionBuilder.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using LightInject; +using Umbraco.Core.DependencyInjection; + +namespace Umbraco.Core.Strings +{ + public class UrlSegmentProviderCollectionBuilder : InjectCollectionBuilderBase + { + public UrlSegmentProviderCollectionBuilder(IServiceContainer container) + : base(container) + { } + + protected override UrlSegmentProviderCollection CreateCollection(IEnumerable items) + { + return new UrlSegmentProviderCollection(items); + } + } +} diff --git a/src/Umbraco.Core/Strings/UrlSegmentProviderResolver.cs b/src/Umbraco.Core/Strings/UrlSegmentProviderResolver.cs deleted file mode 100644 index 50e56a5f47..0000000000 --- a/src/Umbraco.Core/Strings/UrlSegmentProviderResolver.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using LightInject; -using Umbraco.Core.Logging; -using Umbraco.Core.ObjectResolution; - -namespace Umbraco.Core.Strings -{ - /// - /// Resolves IUrlSegmentProvider objects. - /// - public sealed class UrlSegmentProviderResolver : ContainerManyObjectsResolver - { - /// - /// ONLY for testing - /// - /// - /// - /// - [Obsolete("Used only for Tests - should remove")] - internal UrlSegmentProviderResolver(IServiceProvider serviceProvider, ILogger logger, params Type[] providerTypes) - : base(serviceProvider, logger, providerTypes) - { - } - - /// - /// Initializes a new instance of the class with an initial list of provider types. - /// - /// - /// - /// The list of provider types. - /// The resolver is created by the WebBootManager and thus the constructor remains internal. - internal UrlSegmentProviderResolver(IServiceContainer container, ILogger logger, IEnumerable providerTypes) - : base(container, logger, providerTypes) - { } - - /// - /// Initializes a new instance of the class with an initial list of provider types. - /// - /// - /// - /// The list of provider types. - /// The resolver is created by the WebBootManager and thus the constructor remains internal. - internal UrlSegmentProviderResolver(IServiceContainer container, ILogger logger, params Type[] providerTypes) - : base(container, logger, providerTypes) - { } - - /// - /// Gets the providers. - /// - public IEnumerable Providers - { - get { return Values; } - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 6f4ec68181..276fca78c5 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -1124,6 +1124,8 @@ + + @@ -1230,7 +1232,6 @@ - diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs index caca70e7e3..1bcad53440 100644 --- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs +++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs @@ -20,6 +20,7 @@ using Umbraco.Tests.TestHelpers; using Umbraco.Web; using Umbraco.Web.PublishedCache; using Umbraco.Web.PublishedCache.XmlPublishedCache; +using Umbraco.Core.DependencyInjection; namespace Umbraco.Tests.Cache.PublishedCache { @@ -32,7 +33,9 @@ namespace Umbraco.Tests.Cache.PublishedCache var container = new ServiceContainer(); container.EnableAnnotatedConstructorInjection(); - UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver(container, Mock.Of(), typeof(DefaultUrlSegmentProvider)); + container.RegisterCollection(); + container.GetInstance().Add(); + PublishedContentModelFactoryResolver.Current = new PublishedContentModelFactoryResolver(); base.FreezeResolution(); } diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index 1fe2425cc2..b04068cbb7 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -17,6 +17,7 @@ using System.Xml; using Examine.Session; using LightInject; using Umbraco.Core.Cache; +using Umbraco.Core.DependencyInjection; using Umbraco.Core.Logging; using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Strings; @@ -50,7 +51,8 @@ namespace Umbraco.Tests.PublishedContent var container = new ServiceContainer(); container.EnableAnnotatedConstructorInjection(); - UrlSegmentProviderResolver.Current = new UrlSegmentProviderResolver(container, Mock.Of(), typeof(DefaultUrlSegmentProvider)); + container.RegisterCollection(); + container.GetInstance().Add(); base.FreezeResolution(); } diff --git a/src/Umbraco.Web/umbraco.presentation/library.cs b/src/Umbraco.Web/umbraco.presentation/library.cs index e148e45337..058c05b123 100644 --- a/src/Umbraco.Web/umbraco.presentation/library.cs +++ b/src/Umbraco.Web/umbraco.presentation/library.cs @@ -363,7 +363,7 @@ namespace umbraco ApplicationContext.Current.Services.MediaService, ApplicationContext.Current.Services.DataTypeService, ApplicationContext.Current.Services.UserService, - UrlSegmentProviderResolver.Current.Providers, + Umbraco.Core.Current.UrlSegmentProviders, media, deep); return Tuple.Create(serialized, media.Path); @@ -1678,7 +1678,7 @@ namespace umbraco ApplicationContext.Current.Services.ContentService, ApplicationContext.Current.Services.DataTypeService, ApplicationContext.Current.Services.UserService, - UrlSegmentProviderResolver.Current.Providers, parent).GetXmlNode(xd); + Umbraco.Core.Current.UrlSegmentProviders, parent).GetXmlNode(xd); n.AppendChild(x); } } @@ -1691,7 +1691,7 @@ namespace umbraco ApplicationContext.Current.Services.ContentService, ApplicationContext.Current.Services.DataTypeService, ApplicationContext.Current.Services.UserService, - UrlSegmentProviderResolver.Current.Providers, child).GetXmlNode(xd); + Umbraco.Core.Current.UrlSegmentProviders, child).GetXmlNode(xd); n.AppendChild(x); } } diff --git a/src/UmbracoExamine/UmbracoContentIndexer.cs b/src/UmbracoExamine/UmbracoContentIndexer.cs index 51567bf83c..ff2c72d372 100644 --- a/src/UmbracoExamine/UmbracoContentIndexer.cs +++ b/src/UmbracoExamine/UmbracoContentIndexer.cs @@ -52,7 +52,7 @@ namespace UmbracoExamine ContentService = ApplicationContext.Current.Services.ContentService; MediaService = ApplicationContext.Current.Services.MediaService; UserService = ApplicationContext.Current.Services.UserService; - _urlSegmentProviders = UrlSegmentProviderResolver.Current.Providers; + _urlSegmentProviders = Current.UrlSegmentProviders; _queryFactory = ApplicationContext.Current.DatabaseContext.QueryFactory; }