diff --git a/src/Orchard/Environment/DefaultOrchardHost.cs b/src/Orchard/Environment/DefaultOrchardHost.cs
index 6c8e352d7..3c7800dd1 100644
--- a/src/Orchard/Environment/DefaultOrchardHost.cs
+++ b/src/Orchard/Environment/DefaultOrchardHost.cs
@@ -1,6 +1,5 @@
using System.Linq;
using System.Threading;
-using System.Web;
using System.Web.Mvc;
using System.Collections.Generic;
using Orchard.Caching;
@@ -19,9 +18,9 @@ using Orchard.Utility.Extensions;
namespace Orchard.Environment {
public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler {
private readonly ControllerBuilder _controllerBuilder;
+ private readonly IHostLocalRestart _hostLocalRestart;
private readonly IShellSettingsManager _shellSettingsManager;
private readonly IShellContextFactory _shellContextFactory;
- private readonly IShellDescriptorCache _shellDescriptorCache;
private readonly IRunningShellTable _runningShellTable;
private readonly IProcessingEngine _processingEngine;
private readonly IExtensionLoaderCoordinator _extensionLoaderCoordinator;
@@ -33,21 +32,21 @@ namespace Orchard.Environment {
public DefaultOrchardHost(
IShellSettingsManager shellSettingsManager,
IShellContextFactory shellContextFactory,
- IShellDescriptorCache shellDescriptorCache,
IRunningShellTable runningShellTable,
IProcessingEngine processingEngine,
IExtensionLoaderCoordinator extensionLoaderCoordinator,
ICacheManager cacheManager,
- ControllerBuilder controllerBuilder) {
+ ControllerBuilder controllerBuilder,
+ IHostLocalRestart hostLocalRestart ) {
_shellSettingsManager = shellSettingsManager;
_shellContextFactory = shellContextFactory;
- _shellDescriptorCache = shellDescriptorCache;
_runningShellTable = runningShellTable;
_processingEngine = processingEngine;
_extensionLoaderCoordinator = extensionLoaderCoordinator;
_cacheManager = cacheManager;
_controllerBuilder = controllerBuilder;
+ _hostLocalRestart = hostLocalRestart;
T = NullLocalizer.Instance;
Logger = NullLogger.Instance;
@@ -152,7 +151,7 @@ namespace Orchard.Environment {
_cacheManager.Get("OrchardHost_Extensions",
ctx => {
_extensionLoaderCoordinator.MonitorExtensions(ctx.Monitor);
- _shellDescriptorCache.Monitor(ctx.Monitor);
+ _hostLocalRestart.Monitor(ctx.Monitor);
_current = null;
return "";
});
diff --git a/src/Orchard/Environment/Descriptor/ShellDescriptorCache.cs b/src/Orchard/Environment/Descriptor/ShellDescriptorCache.cs
index 1c5654eaa..8904049c6 100644
--- a/src/Orchard/Environment/Descriptor/ShellDescriptorCache.cs
+++ b/src/Orchard/Environment/Descriptor/ShellDescriptorCache.cs
@@ -27,11 +27,6 @@ namespace Orchard.Environment.Descriptor {
/// Loss of storage is expected.
///
void Store(string shellName, ShellDescriptor descriptor);
-
- ///
- /// Monitor changes on the persistent storage.
- ///
- void Monitor(Action monitor);
}
public class ShellDescriptorCache : IShellDescriptorCache {
@@ -104,10 +99,6 @@ namespace Orchard.Environment.Descriptor {
_appDataFolder.CreateFile(DescriptorCacheFileName, saveWriter.ToString());
}
- public void Monitor(Action monitor) {
- monitor(_appDataFolder.WhenPathChanges(DescriptorCacheFileName));
- }
-
#endregion
private void VerifyCacheFile() {
diff --git a/src/Orchard/Environment/IHostLocalRestart.cs b/src/Orchard/Environment/IHostLocalRestart.cs
new file mode 100644
index 000000000..debdb4150
--- /dev/null
+++ b/src/Orchard/Environment/IHostLocalRestart.cs
@@ -0,0 +1,52 @@
+using System;
+using Orchard.Caching;
+using Orchard.Environment.Configuration;
+using Orchard.Environment.Descriptor;
+using Orchard.Environment.Descriptor.Models;
+using Orchard.FileSystems.AppData;
+using Orchard.Logging;
+
+namespace Orchard.Environment {
+ public interface IHostLocalRestart {
+ ///
+ /// Monitor changes on the persistent storage.
+ ///
+ void Monitor(Action monitor);
+ }
+
+ public class DefaultHostLocalRestart : IHostLocalRestart, IShellDescriptorManagerEventHandler, IShellSettingsManagerEventHandler {
+ private readonly IAppDataFolder _appDataFolder;
+ private const string fileName = "hrestart.txt";
+
+ public DefaultHostLocalRestart(IAppDataFolder appDataFolder) {
+ _appDataFolder = appDataFolder;
+ Logger = NullLogger.Instance;
+ }
+
+ public ILogger Logger { get; set; }
+
+ public void Monitor(Action monitor) {
+ if (!_appDataFolder.FileExists(fileName))
+ TouchFile();
+
+ monitor(_appDataFolder.WhenPathChanges(fileName));
+ }
+
+ void IShellSettingsManagerEventHandler.Saved(ShellSettings settings) {
+ TouchFile();
+ }
+
+ void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor) {
+ TouchFile();
+ }
+
+ private void TouchFile() {
+ try {
+ _appDataFolder.CreateFile(fileName, "Host Restart");
+ }
+ catch(Exception e) {
+ Logger.Warning("Error updateting file '{0}': {1}", fileName, e.Message);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard/Environment/OrchardStarter.cs b/src/Orchard/Environment/OrchardStarter.cs
index 7390b09d3..04db8880b 100644
--- a/src/Orchard/Environment/OrchardStarter.cs
+++ b/src/Orchard/Environment/OrchardStarter.cs
@@ -35,6 +35,7 @@ namespace Orchard.Environment {
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
+ builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
builder.RegisterType().As().SingleInstance();
diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj
index 9251df55f..f04a55bab 100644
--- a/src/Orchard/Orchard.Framework.csproj
+++ b/src/Orchard/Orchard.Framework.csproj
@@ -368,6 +368,7 @@
Code
+