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

View File

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