Avoid usage of IOHelper in ModelsBuilderConfig.cs

This commit is contained in:
Bjarke Berg
2020-03-13 12:16:20 +01:00
parent ea15fdb14e
commit 1c03b470d9
8 changed files with 54 additions and 29 deletions

View File

@@ -42,7 +42,7 @@ namespace Umbraco.Core.Configuration
configs.Add(() => CoreDebug);
configs.Add(() => MachineKeyConfig);
configs.Add<IConnectionStrings>(() => new ConnectionStrings(ioHelper, logger));
configs.Add<IModelsBuilderConfig>(() => new ModelsBuilderConfig(ioHelper));
configs.Add<IModelsBuilderConfig>(() => new ModelsBuilderConfig());
configs.Add<IIndexCreatorSettings>(() => IndexCreatorSettings);

View File

@@ -13,7 +13,7 @@ namespace Umbraco.Configuration
/// </summary>
public class ModelsBuilderConfig : IModelsBuilderConfig
{
private readonly IIOHelper _ioHelper;
private const string Prefix = "Umbraco.ModelsBuilder.";
private object _modelsModelLock;
private bool _modelsModelConfigured;
@@ -23,15 +23,13 @@ namespace Umbraco.Configuration
private bool _flagOutOfDateModels;
public string DefaultModelsDirectory => _ioHelper.MapPath("~/App_Data/Models");
public string DefaultModelsDirectory => "~/App_Data/Models";
/// <summary>
/// Initializes a new instance of the <see cref="ModelsBuilderConfig"/> class.
/// </summary>
public ModelsBuilderConfig(IIOHelper ioHelper)
public ModelsBuilderConfig()
{
_ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper));
// giant kill switch, default: false
// must be explicitely set to true for anything else to happen
Enable = ConfigurationManager.AppSettings[Prefix + "Enable"] == "true";
@@ -59,9 +57,7 @@ namespace Umbraco.Configuration
value = ConfigurationManager.AppSettings[Prefix + "ModelsDirectory"];
if (!string.IsNullOrWhiteSpace(value))
{
var root = _ioHelper.MapPath("~/");
if (root == null)
throw new ConfigurationErrorsException("Could not determine root directory.");
var root = "~/";
// GetModelsDirectory will ensure that the path is safe
ModelsDirectory = GetModelsDirectory(root, value, AcceptUnsafeModelsDirectory);
@@ -81,7 +77,7 @@ namespace Umbraco.Configuration
/// <summary>
/// Initializes a new instance of the <see cref="ModelsBuilderConfig"/> class.
/// </summary>
public ModelsBuilderConfig(IIOHelper ioHelper,
public ModelsBuilderConfig(
bool enable = false,
ModelsMode modelsMode = ModelsMode.Nothing,
string modelsNamespace = null,
@@ -91,7 +87,6 @@ namespace Umbraco.Configuration
bool acceptUnsafeModelsDirectory = false,
int debugLevel = 0)
{
_ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper));
Enable = enable;
_modelsMode = modelsMode;

View File

@@ -0,0 +1,12 @@
using Umbraco.Core.IO;
namespace Umbraco.Core.Configuration
{
public static class ModelsBuilderConfigExtensions
{
public static string ModelsDirectoryAbsolute(this IModelsBuilderConfig modelsBuilderConfig, IIOHelper ioHelper)
{
return ioHelper.MapPath(modelsBuilderConfig.ModelsDirectory);
}
}
}

View File

@@ -1,6 +1,7 @@
using System.IO;
using System.Text;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
namespace Umbraco.ModelsBuilder.Embedded.Building
{
@@ -9,20 +10,23 @@ namespace Umbraco.ModelsBuilder.Embedded.Building
private readonly UmbracoServices _umbracoService;
private readonly IModelsBuilderConfig _config;
private readonly OutOfDateModelsStatus _outOfDateModels;
private readonly IIOHelper _ioHelper;
public ModelsGenerator(UmbracoServices umbracoService, IModelsBuilderConfig config, OutOfDateModelsStatus outOfDateModels)
public ModelsGenerator(UmbracoServices umbracoService, IModelsBuilderConfig config, OutOfDateModelsStatus outOfDateModels, IIOHelper ioHelper)
{
_umbracoService = umbracoService;
_config = config;
_outOfDateModels = outOfDateModels;
_ioHelper = ioHelper;
}
internal void GenerateModels()
{
if (!Directory.Exists(_config.ModelsDirectory))
Directory.CreateDirectory(_config.ModelsDirectory);
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
Directory.CreateDirectory(modelsDirectory);
foreach (var file in Directory.GetFiles(_config.ModelsDirectory, "*.generated.cs"))
foreach (var file in Directory.GetFiles(modelsDirectory, "*.generated.cs"))
File.Delete(file);
var typeModels = _umbracoService.GetAllTypes();
@@ -33,7 +37,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building
{
var sb = new StringBuilder();
builder.Generate(sb, typeModel);
var filename = Path.Combine(_config.ModelsDirectory, typeModel.ClrName + ".generated.cs");
var filename = Path.Combine(modelsDirectory, typeModel.ClrName + ".generated.cs");
File.WriteAllText(filename, sb.ToString());
}

View File

@@ -2,16 +2,19 @@
using System.IO;
using System.Text;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
namespace Umbraco.ModelsBuilder.Embedded
{
public sealed class ModelsGenerationError
{
private readonly IModelsBuilderConfig _config;
private readonly IIOHelper _ioHelper;
public ModelsGenerationError(IModelsBuilderConfig config)
public ModelsGenerationError(IModelsBuilderConfig config, IIOHelper ioHelper)
{
_config = config;
_ioHelper = ioHelper;
}
public void Clear()
@@ -56,7 +59,7 @@ namespace Umbraco.ModelsBuilder.Embedded
private string GetErrFile()
{
var modelsDirectory = _config.ModelsDirectory;
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
return null;

View File

@@ -1,5 +1,6 @@
using System.IO;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Web.Cache;
namespace Umbraco.ModelsBuilder.Embedded
@@ -7,10 +8,12 @@ namespace Umbraco.ModelsBuilder.Embedded
public sealed class OutOfDateModelsStatus
{
private readonly IModelsBuilderConfig _config;
private readonly IIOHelper _ioHelper;
public OutOfDateModelsStatus(IModelsBuilderConfig config)
public OutOfDateModelsStatus(IModelsBuilderConfig config, IIOHelper ioHelper)
{
_config = config;
_ioHelper = ioHelper;
}
internal void Install()
@@ -25,7 +28,7 @@ namespace Umbraco.ModelsBuilder.Embedded
private string GetFlagPath()
{
var modelsDirectory = _config.ModelsDirectory;
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
Directory.CreateDirectory(modelsDirectory);
return Path.Combine(modelsDirectory, "ood.flag");

View File

@@ -14,6 +14,7 @@ using System.Web.WebPages.Razor;
using Umbraco.Core.Configuration;
using Umbraco.Core;
using Umbraco.Core.Hosting;
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.ModelsBuilder.Embedded.Building;
@@ -42,15 +43,22 @@ namespace Umbraco.ModelsBuilder.Embedded
private readonly IModelsBuilderConfig _config;
private readonly IHostingEnvironment _hostingEnvironment;
private readonly IIOHelper _ioHelper;
private readonly ModelsGenerationError _errors;
public PureLiveModelFactory(Lazy<UmbracoServices> umbracoServices, IProfilingLogger logger, IModelsBuilderConfig config, IHostingEnvironment hostingEnvironment)
public PureLiveModelFactory(
Lazy<UmbracoServices> umbracoServices,
IProfilingLogger logger,
IModelsBuilderConfig config,
IHostingEnvironment hostingEnvironment,
IIOHelper ioHelper)
{
_umbracoServices = umbracoServices;
_logger = logger;
_config = config;
_hostingEnvironment = hostingEnvironment;
_errors = new ModelsGenerationError(config);
_ioHelper = ioHelper;
_errors = new ModelsGenerationError(config, ioHelper);
_ver = 1; // zero is for when we had no version
_skipver = -1; // nothing to skip
@@ -58,7 +66,7 @@ namespace Umbraco.ModelsBuilder.Embedded
if (!_hostingEnvironment.IsHosted) return;
var modelsDirectory = _config.ModelsDirectory;
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
Directory.CreateDirectory(modelsDirectory);
@@ -208,7 +216,7 @@ namespace Umbraco.ModelsBuilder.Embedded
_hasModels = false;
_pendingRebuild = true;
var modelsDirectory = _config.ModelsDirectory;
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
Directory.CreateDirectory(modelsDirectory);
@@ -330,7 +338,7 @@ namespace Umbraco.ModelsBuilder.Embedded
private Assembly GetModelsAssembly(bool forceRebuild)
{
var modelsDirectory = _config.ModelsDirectory;
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
Directory.CreateDirectory(modelsDirectory);
@@ -552,7 +560,7 @@ namespace Umbraco.ModelsBuilder.Embedded
private string GenerateModelsCode(IList<TypeModel> typeModels)
{
var modelsDirectory = _config.ModelsDirectory;
var modelsDirectory = _config.ModelsDirectoryAbsolute(_ioHelper);
if (!Directory.Exists(modelsDirectory))
Directory.CreateDirectory(modelsDirectory);

View File

@@ -12,21 +12,21 @@ namespace Umbraco.Tests.ModelsBuilder
[Test]
public void Test1()
{
var config = new ModelsBuilderConfig(TestHelper.IOHelper, modelsNamespace: "test1");
var config = new ModelsBuilderConfig(modelsNamespace: "test1");
Assert.AreEqual("test1", config.ModelsNamespace);
}
[Test]
public void Test2()
{
var config = new ModelsBuilderConfig(TestHelper.IOHelper, modelsNamespace: "test2");
var config = new ModelsBuilderConfig(modelsNamespace: "test2");
Assert.AreEqual("test2", config.ModelsNamespace);
}
[Test]
public void DefaultModelsNamespace()
{
var config = new ModelsBuilderConfig(TestHelper.IOHelper);
var config = new ModelsBuilderConfig();
Assert.AreEqual(Constants.ModelsBuilder.DefaultModelsNamespace, config.ModelsNamespace);
}