Merge remote-tracking branch 'origin/netcore/netcore' into feature/8651-config-options-patten
# Conflicts: # src/Umbraco.Core/Configuration/ModelsBuilderConfigExtensions.cs # src/Umbraco.ModelsBuilder.Embedded/BackOffice/ContentTypeModelValidatorBase.cs # src/Umbraco.ModelsBuilder.Embedded/BackOffice/ModelsBuilderDashboardController.cs # src/Umbraco.ModelsBuilder.Embedded/Building/ModelsGenerator.cs # src/Umbraco.ModelsBuilder.Embedded/Compose/ModelsBuilderComposer.cs # src/Umbraco.ModelsBuilder.Embedded/ModelsGenerationError.cs # src/Umbraco.ModelsBuilder.Embedded/OutOfDateModelsStatus.cs # src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs # src/Umbraco.Web.BackOffice/Controllers/RedirectUrlManagementController.cs
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using Umbraco.Core;
|
||||
using Umbraco.Core.Composing;
|
||||
using Umbraco.Core.Composing;
|
||||
using Umbraco.ModelsBuilder.Embedded.BackOffice;
|
||||
using Umbraco.Web.Features;
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Umbraco.Configuration;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Composing;
|
||||
@@ -11,9 +9,11 @@ using Umbraco.Core.IO;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Core.Services.Implement;
|
||||
using Umbraco.Core.Strings;
|
||||
using Umbraco.Extensions;
|
||||
using Umbraco.ModelsBuilder.Embedded.BackOffice;
|
||||
using Umbraco.Web;
|
||||
using Umbraco.Web.Mvc;
|
||||
using Umbraco.Net;
|
||||
using Umbraco.Web.Common.Lifetime;
|
||||
using Umbraco.Web.Common.ModelBinders;
|
||||
using Umbraco.Web.WebAssets;
|
||||
|
||||
namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
@@ -24,14 +24,22 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
private readonly IShortStringHelper _shortStringHelper;
|
||||
private readonly LiveModelsProvider _liveModelsProvider;
|
||||
private readonly OutOfDateModelsStatus _outOfDateModels;
|
||||
private readonly LinkGenerator _linkGenerator;
|
||||
private readonly IUmbracoApplicationLifetime _umbracoApplicationLifetime;
|
||||
private readonly IUmbracoRequestLifetime _umbracoRequestLifetime;
|
||||
|
||||
public ModelsBuilderComponent(IModelsBuilderConfig config, IShortStringHelper shortStringHelper, LiveModelsProvider liveModelsProvider, OutOfDateModelsStatus outOfDateModels)
|
||||
public ModelsBuilderComponent(IModelsBuilderConfig config, IShortStringHelper shortStringHelper,
|
||||
LiveModelsProvider liveModelsProvider, OutOfDateModelsStatus outOfDateModels, LinkGenerator linkGenerator,
|
||||
IUmbracoRequestLifetime umbracoRequestLifetime, IUmbracoApplicationLifetime umbracoApplicationLifetime)
|
||||
{
|
||||
_config = config;
|
||||
_shortStringHelper = shortStringHelper;
|
||||
_liveModelsProvider = liveModelsProvider;
|
||||
_outOfDateModels = outOfDateModels;
|
||||
_shortStringHelper = shortStringHelper;
|
||||
_linkGenerator = linkGenerator;
|
||||
_umbracoRequestLifetime = umbracoRequestLifetime;
|
||||
_umbracoApplicationLifetime = umbracoApplicationLifetime;
|
||||
}
|
||||
|
||||
public void Initialize()
|
||||
@@ -39,6 +47,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
// always setup the dashboard
|
||||
// note: UmbracoApiController instances are automatically registered
|
||||
InstallServerVars();
|
||||
_umbracoApplicationLifetime.ApplicationInit += InitializeApplication;
|
||||
|
||||
ContentModelBinder.ModelBindingException += ContentModelBinder_ModelBindingException;
|
||||
|
||||
@@ -59,6 +68,11 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
FileService.SavingTemplate -= FileService_SavingTemplate;
|
||||
}
|
||||
|
||||
private void InitializeApplication(object sender, EventArgs args)
|
||||
{
|
||||
_umbracoRequestLifetime.RequestEnd += (sender, context) => _liveModelsProvider.AppEndRequest(context);
|
||||
}
|
||||
|
||||
private void InstallServerVars()
|
||||
{
|
||||
// register our url - for the backoffice api
|
||||
@@ -80,11 +94,8 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
if (!(serverVars["umbracoPlugins"] is Dictionary<string, object> umbracoPlugins))
|
||||
throw new ArgumentException("Invalid umbracoPlugins");
|
||||
|
||||
if (HttpContext.Current == null) throw new InvalidOperationException("HttpContext is null");
|
||||
var urlHelper = new UrlHelper(new RequestContext(new HttpContextWrapper(HttpContext.Current), new RouteData()));
|
||||
|
||||
umbracoUrls["modelsBuilderBaseUrl"] = urlHelper.GetUmbracoApiServiceBaseUrl<ModelsBuilderDashboardController>(controller => controller.BuildModels());
|
||||
umbracoPlugins["modelsBuilder"] = GetModelsBuilderSettings();
|
||||
umbracoUrls["modelsBuilderBaseUrl"] = _linkGenerator.GetUmbracoApiServiceBaseUrl<ModelsBuilderDashboardController>(controller => controller.BuildModels());
|
||||
umbracoPlugins["modelsBuilder"] = GetModelsBuilderSettings();
|
||||
}
|
||||
|
||||
private Dictionary<string, object> GetModelsBuilderSettings()
|
||||
|
||||
@@ -24,58 +24,29 @@ namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
|
||||
public void Compose(Composition composition)
|
||||
{
|
||||
var isLegacyModelsBuilderInstalled = IsLegacyModelsBuilderInstalled();
|
||||
|
||||
if (isLegacyModelsBuilderInstalled)
|
||||
{
|
||||
ComposeForLegacyModelsBuilder(composition);
|
||||
return;
|
||||
}
|
||||
|
||||
composition.Components().Append<ModelsBuilderComponent>();
|
||||
composition.Register<UmbracoServices>(Lifetime.Singleton);
|
||||
composition.RegisterUnique<ModelsGenerator>();
|
||||
composition.RegisterUnique<LiveModelsProvider>();
|
||||
composition.RegisterUnique<OutOfDateModelsStatus>();
|
||||
composition.RegisterUnique<ModelsGenerationError>();
|
||||
|
||||
|
||||
if (_config.ModelsMode == ModelsMode.PureLive)
|
||||
ComposeForLiveModels(composition);
|
||||
else if (_config.EnableFactory)
|
||||
ComposeForDefaultModelsFactory(composition);
|
||||
}
|
||||
|
||||
private static bool IsLegacyModelsBuilderInstalled()
|
||||
{
|
||||
Assembly legacyMbAssembly = null;
|
||||
try
|
||||
{
|
||||
legacyMbAssembly = Assembly.Load("Umbraco.ModelsBuilder");
|
||||
}
|
||||
catch (System.Exception)
|
||||
{
|
||||
//swallow exception, DLL must not be there
|
||||
}
|
||||
|
||||
return legacyMbAssembly != null;
|
||||
}
|
||||
|
||||
private void ComposeForLegacyModelsBuilder(Composition composition)
|
||||
{
|
||||
composition.Logger.Info<ModelsBuilderComposer>("ModelsBuilder.Embedded is disabled, the external ModelsBuilder was detected.");
|
||||
composition.Components().Append<DisabledModelsBuilderComponent>();
|
||||
composition.Dashboards().Remove<ModelsBuilderDashboard>();
|
||||
}
|
||||
|
||||
private void ComposeForDefaultModelsFactory(Composition composition)
|
||||
{
|
||||
composition.RegisterUnique<IPublishedModelFactory>(factory =>
|
||||
{
|
||||
var typeLoader = factory.GetInstance<TypeLoader>();
|
||||
var publishedValueFallback = factory.GetInstance<IPublishedValueFallback>();
|
||||
var types = typeLoader
|
||||
.GetTypes<PublishedElementModel>() // element models
|
||||
.Concat(typeLoader.GetTypes<PublishedContentModel>()); // content models
|
||||
return new PublishedModelFactory(types);
|
||||
return new PublishedModelFactory(types, publishedValueFallback);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
using System.Web;
|
||||
using System.Web.Compilation;
|
||||
using Umbraco.ModelsBuilder.Embedded.Compose;
|
||||
|
||||
[assembly: PreApplicationStartMethod(typeof(ModelsBuilderInitializer), "Initialize")]
|
||||
|
||||
namespace Umbraco.ModelsBuilder.Embedded.Compose
|
||||
{
|
||||
public static class ModelsBuilderInitializer
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
// for some reason, netstandard is missing from BuildManager.ReferencedAssemblies and yet, is part of
|
||||
// the references that CSharpCompiler receives - in some cases eg when building views - but not when
|
||||
// using BuildManager to build the PureLive models - where is it coming from? cannot figure it out
|
||||
|
||||
// so... cheating here
|
||||
|
||||
// this is equivalent to adding
|
||||
// <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
|
||||
// to web.config system.web/compilation/assemblies
|
||||
|
||||
var netStandard = ReferencedAssemblies.GetNetStandardAssembly();
|
||||
if (netStandard != null)
|
||||
BuildManager.AddReferencedAssembly(netStandard);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user