mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Refactor ASP.NET specific behavior into abstraction interface
--HG-- branch : dev
This commit is contained in:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user