Refactor ASP.NET specific behavior into abstraction interface

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-06-14 20:49:20 -07:00
parent 4672c4487e
commit 141f8bc421
2 changed files with 30 additions and 16 deletions

View File

@@ -6,30 +6,25 @@ using Orchard.Caching;
using Orchard.Environment.Extensions.Loaders; using Orchard.Environment.Extensions.Loaders;
using Orchard.Environment.Extensions.Models; using Orchard.Environment.Extensions.Models;
using Orchard.FileSystems.Dependencies; using Orchard.FileSystems.Dependencies;
using Orchard.FileSystems.VirtualPath;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Logging; using Orchard.Logging;
using Orchard.Services;
namespace Orchard.Environment.Extensions { namespace Orchard.Environment.Extensions {
public class ExtensionLoaderCoordinator : IExtensionLoaderCoordinator { public class ExtensionLoaderCoordinator : IExtensionLoaderCoordinator {
private readonly IDependenciesFolder _dependenciesFolder; private readonly IDependenciesFolder _dependenciesFolder;
private readonly IExtensionManager _extensionManager; private readonly IExtensionManager _extensionManager;
private readonly IEnumerable<IExtensionLoader> _loaders; private readonly IEnumerable<IExtensionLoader> _loaders;
private readonly IVirtualPathProvider _virtualPathProvider; private readonly IHostEnvironment _hostEnvironment;
private readonly IClock _clock;
public ExtensionLoaderCoordinator( public ExtensionLoaderCoordinator(
IDependenciesFolder dependenciesFolder, IDependenciesFolder dependenciesFolder,
IExtensionManager extensionManager, IExtensionManager extensionManager,
IEnumerable<IExtensionLoader> loaders, IEnumerable<IExtensionLoader> loaders,
IVirtualPathProvider virtualPathProvider, IHostEnvironment hostEnvironment) {
IClock clock) {
_dependenciesFolder = dependenciesFolder; _dependenciesFolder = dependenciesFolder;
_extensionManager = extensionManager; _extensionManager = extensionManager;
_loaders = loaders.OrderBy(l => l.Order); _loaders = loaders.OrderBy(l => l.Order);
_virtualPathProvider = virtualPathProvider; _hostEnvironment = hostEnvironment;
_clock = clock;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
Logger = NullLogger.Instance; Logger = NullLogger.Instance;
} }
@@ -143,15 +138,14 @@ namespace Orchard.Environment.Extensions {
File.Move(entry.Key, entry.Value); File.Move(entry.Key, entry.Value);
} }
if (ctx.RestartAppDomain || ctx.ResetSiteCompilation) { if (ctx.RestartAppDomain) {
if (ctx.RestartAppDomain) Logger.Information("AppDomain restart required.");
Logger.Information("AppDomain restart required."); _hostEnvironment.RestartAppDomain();
}
if (ctx.ResetSiteCompilation) if (ctx.ResetSiteCompilation) {
Logger.Information("Reset site compilation state required."); Logger.Information("Reset site compilation state required.");
_hostEnvironment.ResetSiteCompilation();
// Touch web.config
File.SetLastWriteTimeUtc(_virtualPathProvider.MapPath("~/web.config"), _clock.UtcNow);
} }
} }

View File

@@ -1,16 +1,27 @@
using System; using System;
using System.IO;
using System.Web.Hosting; using System.Web.Hosting;
using Orchard.Services;
namespace Orchard.Environment { namespace Orchard.Environment {
/// <summary> /// <summary>
/// Abstraction of the running environment /// Abstraction of the running environment
/// </summary> /// </summary>
public interface IHostEnvironment : IDependency { public interface IHostEnvironment {
bool IsFullTrust { get; } bool IsFullTrust { get; }
string MapPath(string virtualPath); string MapPath(string virtualPath);
void RestartAppDomain();
void ResetSiteCompilation();
} }
public class DefaultHostEnvironment : IHostEnvironment { public class DefaultHostEnvironment : IHostEnvironment {
private readonly IClock _clock;
public DefaultHostEnvironment(IClock clock) {
_clock = clock;
}
public bool IsFullTrust { public bool IsFullTrust {
get { return AppDomain.CurrentDomain.IsFullyTrusted; } get { return AppDomain.CurrentDomain.IsFullyTrusted; }
} }
@@ -18,5 +29,14 @@ namespace Orchard.Environment {
public string MapPath(string virtualPath) { public string MapPath(string virtualPath) {
return HostingEnvironment.MapPath(virtualPath); return HostingEnvironment.MapPath(virtualPath);
} }
public void RestartAppDomain() {
ResetSiteCompilation();
}
public void ResetSiteCompilation() {
// Touch web.config
File.SetLastWriteTimeUtc(MapPath("~/web.config"), _clock.UtcNow);
}
} }
} }