mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 11:44:58 +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.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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user