diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasHolderUpdater.cs
similarity index 73%
rename from src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs
rename to src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasHolderUpdater.cs
index d9c41d94b..aec6d63ad 100644
--- a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdater.cs
+++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasHolderUpdater.cs
@@ -1,51 +1,61 @@
-using System;
-using System.Linq;
-using Orchard.Alias.Implementation.Holder;
-using Orchard.Alias.Implementation.Storage;
-using Orchard.Environment;
-using Orchard.Tasks;
-using Orchard.Logging;
-
-namespace Orchard.Alias.Implementation.Updater {
- public class AliasHolderUpdater : IOrchardShellEvents, IBackgroundTask {
- private readonly IAliasHolder _aliasHolder;
- private readonly IAliasStorage _storage;
- private readonly IAliasUpdateCursor _cursor;
-
- public ILogger Logger { get; set; }
-
- public AliasHolderUpdater(IAliasHolder aliasHolder, IAliasStorage storage, IAliasUpdateCursor cursor) {
- _aliasHolder = aliasHolder;
- _storage = storage;
- _cursor = cursor;
- Logger = NullLogger.Instance;
- }
-
- void IOrchardShellEvents.Activated() {
- Refresh();
- }
-
- void IOrchardShellEvents.Terminating() {
- }
-
- private void Refresh() {
- try {
- // only retreive aliases which have not been processed yet
- var aliases = _storage.List(x => x.Id > _cursor.Cursor).ToArray();
-
- // update the last processed id
- if (aliases.Any()) {
- _cursor.Cursor = aliases.Last().Item5;
- _aliasHolder.SetAliases(aliases.Select(alias => new AliasInfo { Path = alias.Item1, Area = alias.Item2, RouteValues = alias.Item3 }));
- }
- }
- catch (Exception ex) {
- Logger.Error(ex, "Exception during Alias refresh");
- }
- }
-
- public void Sweep() {
- Refresh();
- }
- }
-}
+using System;
+using System.Linq;
+using Orchard.Alias.Implementation.Holder;
+using Orchard.Alias.Implementation.Storage;
+using Orchard.Environment;
+using Orchard.Tasks;
+using Orchard.Logging;
+using Orchard.Environment.Extensions;
+
+namespace Orchard.Alias.Implementation.Updater {
+ public interface IAliasHolderUpdater : IDependency {
+ void Refresh();
+ }
+
+ public class AliasHolderUpdater : IAliasHolderUpdater {
+ private readonly IAliasHolder _aliasHolder;
+ private readonly IAliasStorage _storage;
+ private readonly IAliasUpdateCursor _cursor;
+
+ public ILogger Logger { get; set; }
+
+ public AliasHolderUpdater(IAliasHolder aliasHolder, IAliasStorage storage, IAliasUpdateCursor cursor) {
+ _aliasHolder = aliasHolder;
+ _storage = storage;
+ _cursor = cursor;
+ Logger = NullLogger.Instance;
+ }
+
+ public void Refresh() {
+ try {
+ // only retreive aliases which have not been processed yet
+ var aliases = _storage.List(x => x.Id > _cursor.Cursor).ToArray();
+
+ // update the last processed id
+ if (aliases.Any()) {
+ _cursor.Cursor = aliases.Last().Item5;
+ _aliasHolder.SetAliases(aliases.Select(alias => new AliasInfo { Path = alias.Item1, Area = alias.Item2, RouteValues = alias.Item3 }));
+ }
+ }
+ catch (Exception ex) {
+ Logger.Error(ex, "Exception during Alias refresh");
+ }
+ }
+ }
+
+ public class AliasUpdaterEvent : IOrchardShellEvents {
+
+ private readonly IAliasHolderUpdater _aliasHolderUpdater;
+
+ public AliasUpdaterEvent(IAliasHolderUpdater aliasHolderUpdater) {
+ _aliasHolderUpdater = aliasHolderUpdater;
+ }
+
+ void IOrchardShellEvents.Activated() {
+ _aliasHolderUpdater.Refresh();
+ }
+
+ void IOrchardShellEvents.Terminating() {
+ }
+ }
+}
diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs
new file mode 100644
index 000000000..1c3ecab62
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Alias/Implementation/Updater/AliasUpdaterBackgroundTask.cs
@@ -0,0 +1,19 @@
+using Orchard.Environment.Extensions;
+using Orchard.Tasks;
+
+namespace Orchard.Alias.Implementation.Updater {
+ [OrchardFeature("Orchard.Alias.Updater")]
+ public class AliasUpdaterBackgroundTask : IBackgroundTask {
+
+ private readonly IAliasHolderUpdater _aliasHolderUpdater;
+
+ public AliasUpdaterBackgroundTask(IAliasHolderUpdater aliasHolderUpdater) {
+ _aliasHolderUpdater = aliasHolderUpdater;
+ }
+
+ public void Sweep() {
+ _aliasHolderUpdater.Refresh();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Module.txt b/src/Orchard.Web/Modules/Orchard.Alias/Module.txt
index 3164287e0..0e7a0305c 100644
--- a/src/Orchard.Web/Modules/Orchard.Alias/Module.txt
+++ b/src/Orchard.Web/Modules/Orchard.Alias/Module.txt
@@ -13,3 +13,8 @@ Features:
Description: Admin user interface for Orchard.Alias.
Dependencies: Orchard.Alias
Category: Content
+ Orchard.Alias.Updater:
+ Name: Alias Updater
+ Description: Synchronizes aliases when created from different servers.
+ Dependencies: Orchard.Alias
+ Category: Content
diff --git a/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj b/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj
index e4eaf362a..e4903ceb7 100644
--- a/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj
@@ -77,6 +77,7 @@
+
@@ -102,7 +103,7 @@
-
+