From e42f140a2c82dc3a4a6b913b2c735a2bfcd01f7b Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 28 Nov 2018 16:57:01 +0100 Subject: [PATCH] Cleanup --- src/Umbraco.Core/Composing/RegisterFactory.cs | 12 +-- .../Runtime/CoreRuntimeComponent.cs | 2 +- .../DistributedCache/DistributedCacheTests.cs | 5 +- .../Components/ComponentTests.cs | 5 - .../Composing/CollectionBuildersTests.cs | 91 +++++++++++-------- ...erTests.cs => ContainerConfirmingTests.cs} | 51 ++++++++++- .../Composing/ContainerImplementationTests.cs | 71 --------------- .../Composing/PackageActionCollectionTests.cs | 8 +- .../TestHelpers/TestObjects-Mocks.cs | 2 +- src/Umbraco.Tests/Testing/UmbracoTestBase.cs | 16 +--- src/Umbraco.Tests/Umbraco.Tests.csproj | 3 +- src/Umbraco.Web/Editors/MacroController.cs | 2 +- src/Umbraco.Web/Editors/TourController.cs | 17 ++-- src/Umbraco.Web/Mvc/RenderRouteHandler.cs | 11 +-- src/Umbraco.Web/Templates/TemplateRenderer.cs | 27 +++--- src/Umbraco.Web/UmbracoComponentRenderer.cs | 5 - 16 files changed, 150 insertions(+), 178 deletions(-) rename src/Umbraco.Tests/Composing/{ContainerTests.cs => ContainerConfirmingTests.cs} (79%) delete mode 100644 src/Umbraco.Tests/Composing/ContainerImplementationTests.cs diff --git a/src/Umbraco.Core/Composing/RegisterFactory.cs b/src/Umbraco.Core/Composing/RegisterFactory.cs index bb132c247a..8ee6e5a94c 100644 --- a/src/Umbraco.Core/Composing/RegisterFactory.cs +++ b/src/Umbraco.Core/Composing/RegisterFactory.cs @@ -25,9 +25,7 @@ namespace Umbraco.Core.Composing { Type type; - // fixme naming / container? - - var configuredTypeName = ConfigurationManager.AppSettings["umbracoContainerType"]; + var configuredTypeName = ConfigurationManager.AppSettings["umbracoRegisterType"]; if (configuredTypeName.IsNullOrWhiteSpace()) { // try to get the web LightInject container type, @@ -37,20 +35,20 @@ namespace Umbraco.Core.Composing } else { - // try to get the configured container type + // try to get the configured type type = Type.GetType(configuredTypeName); } if (type == null) - throw new Exception($"Cannot find container factory class '{configuredTypeName}'."); + throw new Exception($"Cannot find register factory class '{configuredTypeName}'."); var factoryMethod = type.GetMethod("Create", BindingFlags.Public | BindingFlags.Static); if (factoryMethod == null) - throw new Exception($"Container factory class '{configuredTypeName}' does not have a public static method named Create."); + throw new Exception($"Register factory class '{configuredTypeName}' does not have a public static method named Create."); var container = factoryMethod.Invoke(null, Array.Empty()) as IRegister; if (container == null) - throw new Exception($"Container factory '{configuredTypeName}' did not return an IRegister implementation."); + throw new Exception($"Register factory '{configuredTypeName}' did not return an IRegister implementation."); return container; } diff --git a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs index c4167af2b0..63cd4e726b 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs @@ -74,7 +74,7 @@ namespace Umbraco.Core.Runtime composition.RegisterSingleton(); composition.RegisterSingleton(); - // register a server registrar, by default it's the db registrar + // register a server registrar, by default it's the db registrar composition.RegisterSingleton(f => { if ("true".InvariantEquals(ConfigurationManager.AppSettings["umbracoDisableElectionForSingleServer"])) diff --git a/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs b/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs index 5c2681e184..684e06b300 100644 --- a/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs +++ b/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs @@ -7,7 +7,6 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Sync; @@ -25,7 +24,7 @@ namespace Umbraco.Tests.Cache.DistributedCache public void Setup() { var register = RegisterFactory.Create(); - Current.Factory = register.CreateFactory(); // fixme only for LightInject + var composition = new Composition(register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); register.Register(_ => new TestServerRegistrar()); @@ -34,6 +33,8 @@ namespace Umbraco.Tests.Cache.DistributedCache composition.GetCollectionBuilder() .Add(); + Current.Factory = register.CreateFactory(); + _distributedCache = new Umbraco.Web.Cache.DistributedCache(); } diff --git a/src/Umbraco.Tests/Components/ComponentTests.cs b/src/Umbraco.Tests/Components/ComponentTests.cs index e455f9e6e7..e68dae8a45 100644 --- a/src/Umbraco.Tests/Components/ComponentTests.cs +++ b/src/Umbraco.Tests/Components/ComponentTests.cs @@ -4,16 +4,13 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Scoping; -using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Components { @@ -53,8 +50,6 @@ namespace Umbraco.Tests.Components return new TypeLoader(); } - // fixme should we have Composition.Logger, which would be a profiling logger too? - [Test] public void Boot1A() { diff --git a/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs b/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs index f30c9a36e3..0d0374d37a 100644 --- a/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs +++ b/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs @@ -13,8 +13,6 @@ namespace Umbraco.Tests.Composing [TestFixture] public class CollectionBuildersTests { - private IRegister _register; - private IFactory _factory; private Composition _composition; [SetUp] @@ -22,19 +20,14 @@ namespace Umbraco.Tests.Composing { Current.Reset(); - _register = RegisterFactory.Create(); - _factory = _register.CreateFactory(); // fixme only works w/LightInject - would require we reorg tests! - Current.Factory = _factory; - _composition = new Composition(_register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + var register = RegisterFactory.Create(); + _composition = new Composition(register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); } [TearDown] public void TearDown() { Current.Reset(); - - _register.DisposeIfDisposable(); - _register = null; } [Test] @@ -49,7 +42,8 @@ namespace Umbraco.Tests.Composing Assert.IsFalse(builder.Has()); //Assert.IsFalse(col.ContainsType()); // does not compile - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved2)); } @@ -64,7 +58,8 @@ namespace Umbraco.Tests.Composing Assert.IsFalse(builder.Has()); Assert.IsFalse(builder.Has()); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col); } @@ -75,7 +70,8 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); Assert.Throws(() => builder.Clear()); } @@ -91,7 +87,8 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(builder.Has()); Assert.IsFalse(builder.Has()); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved2)); } @@ -100,7 +97,8 @@ namespace Umbraco.Tests.Composing { var builder = _composition.GetCollectionBuilder(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); Assert.Throws(() => builder.Append() @@ -114,7 +112,9 @@ namespace Umbraco.Tests.Composing builder.Append(); builder.Append(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved1)); } @@ -122,6 +122,7 @@ namespace Umbraco.Tests.Composing public void CannotAppendInvalidTypeToBUilder() { var builder = _composition.GetCollectionBuilder(); + //builder.Append(); // does not compile Assert.Throws(() => builder.Append(new[] { typeof (Resolved4) }) // throws @@ -140,7 +141,8 @@ namespace Umbraco.Tests.Composing Assert.IsFalse(builder.Has()); Assert.IsFalse(builder.Has()); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved1)); } @@ -152,7 +154,8 @@ namespace Umbraco.Tests.Composing .Append() .Remove(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved2)); } @@ -163,7 +166,8 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); Assert.Throws(() => builder.Remove() // throws ); @@ -181,7 +185,8 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(builder.Has()); Assert.IsTrue(builder.Has()); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved3), typeof(Resolved1), typeof(Resolved2)); } @@ -192,7 +197,8 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); Assert.Throws(() => builder.Insert() // throws ); @@ -206,7 +212,8 @@ namespace Umbraco.Tests.Composing .Append() .Insert(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved2), typeof(Resolved1)); } @@ -216,7 +223,8 @@ namespace Umbraco.Tests.Composing var builder = _composition.GetCollectionBuilder(); builder.Insert(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved2)); } @@ -248,7 +256,8 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(builder.Has()); Assert.IsTrue(builder.Has()); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved1), typeof(Resolved3), typeof(Resolved2)); } @@ -259,7 +268,8 @@ namespace Umbraco.Tests.Composing .Append() .Append(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); Assert.Throws(() => builder.InsertBefore() ); @@ -273,7 +283,8 @@ namespace Umbraco.Tests.Composing .Append() .InsertBefore(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved2), typeof(Resolved1)); } @@ -299,10 +310,12 @@ namespace Umbraco.Tests.Composing // but the container manages the scope, so to test the scope // the collection must come from the container - var col1 = _factory.GetInstance(); + var factory = _composition.CreateFactory(); + + var col1 = factory.GetInstance(); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2)); - var col2 = _factory.GetInstance(); + var col2 = factory.GetInstance(); AssertCollection(col2, typeof(Resolved1), typeof(Resolved2)); AssertSameCollection(col1, col2); @@ -319,10 +332,12 @@ namespace Umbraco.Tests.Composing // but the container manages the scope, so to test the scope // the collection must come from the container - var col1 = _factory.GetInstance(); + var factory = _composition.CreateFactory(); + + var col1 = factory.GetInstance(); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2)); - var col2 = _factory.GetInstance(); + var col2 = factory.GetInstance(); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2)); AssertNotSameCollection(col1, col2); @@ -336,7 +351,8 @@ namespace Umbraco.Tests.Composing .Insert() .InsertBefore(); - var col1 = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col1 = builder.CreateCollection(factory); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2), typeof(Resolved3)); } @@ -353,10 +369,12 @@ namespace Umbraco.Tests.Composing TestCollection col1A, col1B; - using (_factory.BeginScope()) + var factory = _composition.CreateFactory(); + + using (factory.BeginScope()) { - col1A = _factory.GetInstance(); - col1B = _factory.GetInstance(); + col1A = factory.GetInstance(); + col1B = factory.GetInstance(); } AssertCollection(col1A, typeof(Resolved1), typeof(Resolved2)); @@ -365,9 +383,9 @@ namespace Umbraco.Tests.Composing TestCollection col2; - using (_factory.BeginScope()) + using (factory.BeginScope()) { - col2 = _factory.GetInstance(); + col2 = factory.GetInstance(); } AssertCollection(col2, typeof(Resolved1), typeof(Resolved2)); @@ -381,7 +399,8 @@ namespace Umbraco.Tests.Composing .Add() .Add(); - var col = builder.CreateCollection(_factory); + var factory = _composition.CreateFactory(); + var col = builder.CreateCollection(factory); AssertCollection(col, typeof(Resolved2), typeof(Resolved1)); } diff --git a/src/Umbraco.Tests/Composing/ContainerTests.cs b/src/Umbraco.Tests/Composing/ContainerConfirmingTests.cs similarity index 79% rename from src/Umbraco.Tests/Composing/ContainerTests.cs rename to src/Umbraco.Tests/Composing/ContainerConfirmingTests.cs index b5be97ce38..fd76dbe8bb 100644 --- a/src/Umbraco.Tests/Composing/ContainerTests.cs +++ b/src/Umbraco.Tests/Composing/ContainerConfirmingTests.cs @@ -8,7 +8,7 @@ using Umbraco.Core.Composing.LightInject; namespace Umbraco.Tests.Composing { [TestFixture] - public class ContainerTests + public class ContainerConfirmingTests { // tests that a container conforms @@ -212,12 +212,61 @@ namespace Umbraco.Tests.Composing Assert.AreEqual(2, things. Count()); } + [Test] + public void CanRegisterSingletonInterface() + { + var register = GetRegister(); + register.RegisterSingleton(); + var factory = register.CreateFactory(); + var s1 = factory.GetInstance(); + var s2 = factory.GetInstance(); + Assert.AreSame(s1, s2); + } + + [Test] + public void CanRegisterSingletonClass() + { + var register = GetRegister(); + register.RegisterSingleton(); + var factory = register.CreateFactory(); + var s1 = factory.GetInstance(); + var s2 = factory.GetInstance(); + Assert.AreSame(s1, s2); + } + + [Test] + public void CanReRegisterSingletonInterface() + { + var register = GetRegister(); + register.RegisterSingleton(); + register.RegisterSingleton(); + var factory = register.CreateFactory(); + var s = factory.GetInstance(); + Assert.IsInstanceOf(s); + } + + [Test] + public void CanRegisterSingletonWithCreate() + { + var register = GetRegister(); + register.RegisterSingleton(c => c.CreateInstance(new Thing1())); + var factory = register.CreateFactory(); + var s1 = factory.GetInstance(); + var s2 = factory.GetInstance(); + Assert.AreSame(s1, s2); + } + public interface IThing { } public abstract class ThingBase : IThing { } public class Thing1 : ThingBase { } public class Thing2 : ThingBase { } + public class Thing3 : ThingBase + { + public Thing3(Thing1 thing) { } + } + public class NeedThings { public NeedThings(IEnumerable things) diff --git a/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs b/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs deleted file mode 100644 index 6e0fdd0912..0000000000 --- a/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Collections.Generic; -using NUnit.Framework; -using Umbraco.Core.Composing; - -namespace Umbraco.Tests.Composing -{ - // TODO - // this class should contain everything to ensure that a container implementation - // complies with Umbraco's requirements. - - [TestFixture] - public class ContainerImplementationTests // FIXME merge into ContainerTests or ContainerConformingTests - { - private IRegister CreateRegister() => RegisterFactory.Create(); - - [Test] - public void CanRegisterSingletonInterface() - { - var register = CreateRegister(); - register.RegisterSingleton(); - var factory = register.CreateFactory(); - var s1 = factory.GetInstance(); - var s2 = factory.GetInstance(); - Assert.AreSame(s1, s2); - } - - [Test] - public void CanRegisterSingletonClass() - { - var register = CreateRegister(); - register.RegisterSingleton(); - var factory = register.CreateFactory(); - var s1 = factory.GetInstance(); - var s2 = factory.GetInstance(); - Assert.AreSame(s1, s2); - } - - [Test] - public void CanReRegisterSingletonInterface() - { - var register = CreateRegister(); - register.RegisterSingleton(); - register.RegisterSingleton(); - var factory = register.CreateFactory(); - var s = factory.GetInstance(); - Assert.IsInstanceOf(s); - } - - [Test] - public void CanRegisterSingletonWithCreate() - { - var register = CreateRegister(); - register.RegisterSingleton(c => c.CreateInstance(new TestClass1())); - var factory = register.CreateFactory(); - var s1 = factory.GetInstance(); - var s2 = factory.GetInstance(); - Assert.AreSame(s1, s2); - } - - public interface ITestInterface{} - - public class TestClass1 : ITestInterface{} - - public class TestClass2 : ITestInterface{} - - public class TestClass3 - { - public TestClass3(TestClass1 c) {} - } - } -} diff --git a/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs b/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs index 1b201f3bc5..f66cab18c4 100644 --- a/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs +++ b/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs @@ -18,18 +18,20 @@ namespace Umbraco.Tests.Composing public void PackageActionCollectionBuilderWorks() { var container = RegisterFactory.Create(); - Current.Factory = container.CreateFactory(); // fixme only for LightInject + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Add(() => TypeLoader.GetPackageActions()); + Current.Factory = container.CreateFactory(); + var actions = Current.PackageActions; Assert.AreEqual(2, actions.Count()); // order is unspecified, but both must be there - bool hasAction1 = actions.ElementAt(0) is PackageAction1 || actions.ElementAt(1) is PackageAction1; - bool hasAction2 = actions.ElementAt(0) is PackageAction2 || actions.ElementAt(1) is PackageAction2; + var hasAction1 = actions.ElementAt(0) is PackageAction1 || actions.ElementAt(1) is PackageAction1; + var hasAction2 = actions.ElementAt(0) is PackageAction2 || actions.ElementAt(1) is PackageAction2; Assert.IsTrue(hasAction1); Assert.IsTrue(hasAction2); } diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs b/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs index eeddfa6043..57bf940bc0 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs @@ -55,7 +55,7 @@ namespace Umbraco.Tests.TestHelpers /// A ServiceContext. public ServiceContext GetServiceContextMock(IFactory container = null) { - // fixme - else tests break - something's wrong + // fixme - else some tests break - figure it out container = null; return new ServiceContext( diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 37c5853c36..e67fd912c8 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -120,7 +120,8 @@ namespace Umbraco.Tests.Testing // get/merge the attributes marking the method and/or the classes Options = TestOptionAttributeBase.GetTestOptions(); - // fixme see CoreRuntime and align! + // fixme - align to runtimes & components - don't redo everything here + var (logger, profiler) = GetLoggers(Options.Logger); var proflogger = new ProfilingLogger(logger, profiler); var cacheHelper = GetCacheHelper(); @@ -203,8 +204,6 @@ namespace Umbraco.Tests.Testing protected virtual void ComposeWeb() { - //TODO: Should we 'just' register the WebRuntimeComponent? - // imported from TestWithSettingsBase // which was inherited by TestWithApplicationBase so pretty much used everywhere Umbraco.Web.Composing.Current.UmbracoContextAccessor = new TestUmbracoContextAccessor(); @@ -284,7 +283,6 @@ namespace Umbraco.Tests.Testing // create the file // create the schema - } protected virtual void ComposeApplication(bool withApplication) @@ -330,7 +328,7 @@ namespace Umbraco.Tests.Testing Composition.RegisterSingleton(f => new UmbracoDatabaseFactory( Constants.System.UmbracoConnectionName, Logger, - new Lazy(() => Mock.Of()))); + new Lazy(Mock.Of))); Composition.RegisterSingleton(f => f.TryGetInstance().SqlContext); Composition.GetCollectionBuilder(); // empty @@ -404,7 +402,7 @@ namespace Umbraco.Tests.Testing // which would lock eg SqlCe .sdf files if (Factory?.TryGetInstance() is ScopeProvider scopeProvider) { - Core.Scoping.Scope scope; + Scope scope; while ((scope = scopeProvider.AmbientScope) != null) { scope.Reset(); @@ -412,11 +410,7 @@ namespace Umbraco.Tests.Testing } } - Current.Reset(); - - // fixme what should we dispose? IRegister or IFactory or? - //Container?.Dispose(); - //Container = null; + Current.Reset(); // disposes the factory // reset all other static things that should not be static ;( UriUtility.ResetAppDomainAppVirtualPath(); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 26b5f4c9ce..c84aef7256 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -116,8 +116,7 @@ - - + diff --git a/src/Umbraco.Web/Editors/MacroController.cs b/src/Umbraco.Web/Editors/MacroController.cs index 3c576befb9..9780c23504 100644 --- a/src/Umbraco.Web/Editors/MacroController.cs +++ b/src/Umbraco.Web/Editors/MacroController.cs @@ -136,7 +136,7 @@ namespace Umbraco.Web.Editors var legacyPage = new global::umbraco.page(doc, _variationContextAccessor); UmbracoContext.HttpContext.Items["pageElements"] = legacyPage.Elements; - UmbracoContext.HttpContext.Items[global::Umbraco.Core.Constants.Conventions.Url.AltTemplate] = null; + UmbracoContext.HttpContext.Items[Core.Constants.Conventions.Url.AltTemplate] = null; var renderer = new UmbracoComponentRenderer(UmbracoContext); diff --git a/src/Umbraco.Web/Editors/TourController.cs b/src/Umbraco.Web/Editors/TourController.cs index 021daff423..b45c233aec 100644 --- a/src/Umbraco.Web/Editors/TourController.cs +++ b/src/Umbraco.Web/Editors/TourController.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using Newtonsoft.Json; -using Umbraco.Core; -using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Web.Models; @@ -16,6 +14,13 @@ namespace Umbraco.Web.Editors [PluginController("UmbracoApi")] public class TourController : UmbracoAuthorizedJsonController { + private readonly TourFilterCollection _filters; + + public TourController(TourFilterCollection filters) + { + _filters = filters; + } + public IEnumerable GetTours() { var result = new List(); @@ -23,13 +28,11 @@ namespace Umbraco.Web.Editors if (UmbracoConfig.For.UmbracoSettings().BackOffice.Tours.EnableTours == false) return result; - var filters = Current.Factory.GetInstance().ToList(); // fixme inject - //get all filters that will be applied to all tour aliases - var aliasOnlyFilters = filters.Where(x => x.PluginName == null && x.TourFileName == null).ToList(); + var aliasOnlyFilters = _filters.Where(x => x.PluginName == null && x.TourFileName == null).ToList(); //don't pass in any filters for core tours that have a plugin name assigned - var nonPluginFilters = filters.Where(x => x.PluginName == null).ToList(); + var nonPluginFilters = _filters.Where(x => x.PluginName == null).ToList(); //add core tour files var coreToursPath = Path.Combine(IOHelper.MapPath(SystemDirectories.Config), "BackOfficeTours"); @@ -45,7 +48,7 @@ namespace Umbraco.Web.Editors foreach (var plugin in Directory.EnumerateDirectories(IOHelper.MapPath(SystemDirectories.AppPlugins))) { var pluginName = Path.GetFileName(plugin.TrimEnd('\\')); - var pluginFilters = filters.Where(x => x.PluginName != null && x.PluginName.IsMatch(pluginName)).ToList(); + var pluginFilters = _filters.Where(x => x.PluginName != null && x.PluginName.IsMatch(pluginName)).ToList(); //If there is any filter applied to match the plugin only (no file or tour alias) then ignore the plugin entirely var isPluginFiltered = pluginFilters.Any(x => x.TourFileName == null && x.TourAlias == null); diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index 5ab597c5ca..29e861aec4 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -30,17 +30,12 @@ namespace Umbraco.Web.Mvc private readonly IUmbracoContextAccessor _umbracoContextAccessor; private readonly UmbracoContext _umbracoContext; - // fixme - that one could / should accept a PublishedRouter (engine) to work on the PublishedRequest (published content request) public RenderRouteHandler(IUmbracoContextAccessor umbracoContextAccessor, IControllerFactory controllerFactory) { _umbracoContextAccessor = umbracoContextAccessor ?? throw new ArgumentNullException(nameof(umbracoContextAccessor)); _controllerFactory = controllerFactory ?? throw new ArgumentNullException(nameof(controllerFactory)); } - // fixme - what about that one? - // called by TemplateRenderer - which is created in - // library - could get an engine without problem it's all ugly anyways - // UmbracoComponentRenderer - ?? that one is not so obvious public RenderRouteHandler(UmbracoContext umbracoContext, IControllerFactory controllerFactory) { _umbracoContext = umbracoContext ?? throw new ArgumentNullException(nameof(umbracoContext)); @@ -396,8 +391,6 @@ namespace Umbraco.Web.Mvc if ((request.HasTemplate == false && Features.Disabled.DisableTemplates == false) && routeDef.HasHijackedRoute == false) { - // fixme - better find a way to inject that engine? or at least Current.Engine of some sort! - var engine = Core.Composing.Current.Factory.GetInstance(); request.UpdateOnMissingTemplate(); // request will go 404 // HandleHttpResponseStatus returns a value indicating that the request should @@ -426,7 +419,7 @@ namespace Umbraco.Web.Mvc routeDef = GetUmbracoRouteDefinition(requestContext, request); } - //no post values, just route to the controller/action requried (local) + //no post values, just route to the controller/action required (local) requestContext.RouteData.Values["controller"] = routeDef.ControllerName; if (string.IsNullOrWhiteSpace(routeDef.ActionName) == false) @@ -448,7 +441,7 @@ namespace Umbraco.Web.Mvc /// internal static IHttpHandler GetWebFormsHandler() { - return (global::umbraco.UmbracoDefault)BuildManager.CreateInstanceFromVirtualPath("~/default.aspx", typeof(global::umbraco.UmbracoDefault)); + return (umbraco.UmbracoDefault) BuildManager.CreateInstanceFromVirtualPath("~/default.aspx", typeof(umbraco.UmbracoDefault)); } private SessionStateBehavior GetSessionStateBehavior(RequestContext requestContext, string controllerName) diff --git a/src/Umbraco.Web/Templates/TemplateRenderer.cs b/src/Umbraco.Web/Templates/TemplateRenderer.cs index 9c2c4973e0..0f5e486a50 100644 --- a/src/Umbraco.Web/Templates/TemplateRenderer.cs +++ b/src/Umbraco.Web/Templates/TemplateRenderer.cs @@ -25,23 +25,20 @@ namespace Umbraco.Web.Templates /// internal class TemplateRenderer { - private readonly IFileService _fileService = Current.Services.FileService; // fixme inject private readonly UmbracoContext _umbracoContext; - private object _oldPageId; private object _oldPageElements; private PublishedRequest _oldPublishedRequest; private object _oldAltTemplate; public TemplateRenderer(UmbracoContext umbracoContext, int pageId, int? altTemplateId) { - if (umbracoContext == null) throw new ArgumentNullException(nameof(umbracoContext)); PageId = pageId; AltTemplate = altTemplateId; - _umbracoContext = umbracoContext; + _umbracoContext = umbracoContext ?? throw new ArgumentNullException(nameof(umbracoContext)); } - // todo - inject! - private PublishedRouter PublishedRouter => Core.Composing.Current.Factory.GetInstance(); + private IFileService FileService => Current.Services.FileService; // fixme inject + private PublishedRouter PublishedRouter => Core.Composing.Current.Factory.GetInstance(); // fixme inject /// @@ -58,10 +55,9 @@ namespace Umbraco.Web.Templates { if (writer == null) throw new ArgumentNullException(nameof(writer)); - // instanciate a request a process + // instantiate a request and process // important to use CleanedUmbracoUrl - lowercase path-only version of the current url, though this isn't going to matter // terribly much for this implementation since we are just creating a doc content request to modify it's properties manually. - // fixme - previously that would create an aengine... var contentRequest = PublishedRouter.CreateRequest(_umbracoContext); var doc = contentRequest.UmbracoContext.ContentCache.GetById(PageId); @@ -91,8 +87,8 @@ namespace Umbraco.Web.Templates contentRequest.PublishedContent = doc; //set the template, either based on the AltTemplate found or the standard template of the doc contentRequest.TemplateModel = UmbracoConfig.For.UmbracoSettings().WebRouting.DisableAlternativeTemplates || AltTemplate.HasValue == false - ? _fileService.GetTemplate(doc.TemplateId) - : _fileService.GetTemplate(AltTemplate.Value); + ? FileService.GetTemplate(doc.TemplateId) + : FileService.GetTemplate(AltTemplate.Value); //if there is not template then exit if (contentRequest.HasTemplate == false) @@ -160,8 +156,8 @@ namespace Umbraco.Web.Templates break; case RenderingEngine.WebForms: default: - var webFormshandler = (global::umbraco.UmbracoDefault)BuildManager - .CreateInstanceFromVirtualPath("~/default.aspx", typeof(global::umbraco.UmbracoDefault)); + var webFormshandler = (UmbracoDefault) BuildManager + .CreateInstanceFromVirtualPath("~/default.aspx", typeof(UmbracoDefault)); //the 'true' parameter will ensure that the current query strings are carried through, we don't have // to build up the url again, it will just work. _umbracoContext.HttpContext.Server.Execute(webFormshandler, sw, true); @@ -213,11 +209,10 @@ namespace Umbraco.Web.Templates private void SaveExistingItems() { //Many objects require that these legacy items are in the http context items... before we render this template we need to first - //save the values in them so that we can re-set them after we render so the rest of the execution works as per normal - _oldPageId = _umbracoContext.PageId; + //save the values in them so that we can re-set them after we render so the rest of the execution works as per normal _oldPageElements = _umbracoContext.HttpContext.Items["pageElements"]; _oldPublishedRequest = _umbracoContext.PublishedRequest; - _oldAltTemplate = _umbracoContext.HttpContext.Items[Umbraco.Core.Constants.Conventions.Url.AltTemplate]; + _oldAltTemplate = _umbracoContext.HttpContext.Items[Core.Constants.Conventions.Url.AltTemplate]; } /// @@ -227,7 +222,7 @@ namespace Umbraco.Web.Templates { _umbracoContext.PublishedRequest = _oldPublishedRequest; _umbracoContext.HttpContext.Items["pageElements"] = _oldPageElements; - _umbracoContext.HttpContext.Items[Umbraco.Core.Constants.Conventions.Url.AltTemplate] = _oldAltTemplate; + _umbracoContext.HttpContext.Items[Core.Constants.Conventions.Url.AltTemplate] = _oldAltTemplate; } } } diff --git a/src/Umbraco.Web/UmbracoComponentRenderer.cs b/src/Umbraco.Web/UmbracoComponentRenderer.cs index 76a2f17636..e2d4ecfc39 100644 --- a/src/Umbraco.Web/UmbracoComponentRenderer.cs +++ b/src/Umbraco.Web/UmbracoComponentRenderer.cs @@ -1,17 +1,12 @@ using System; using System.Collections; -using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using Umbraco.Core; -using Umbraco.Core.Models; using Umbraco.Web.Templates; using umbraco; using System.Collections.Generic; -using umbraco.presentation.templateControls; -using Umbraco.Core.Exceptions; -using Umbraco.Core.Models.PublishedContent; using Umbraco.Web.Composing; using Umbraco.Web.Macros;