diff --git a/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs b/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs index d47d66904..ae0a59102 100644 --- a/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs +++ b/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs @@ -28,7 +28,7 @@ namespace Orchard.Tests.Environment.Configuration { _appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else"); - IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock().Object); + IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock().Object); var settings = loader.LoadSettings().Single(); Assert.That(settings, Is.Not.Null); Assert.That(settings.Name, Is.EqualTo("Default")); @@ -43,7 +43,7 @@ namespace Orchard.Tests.Environment.Configuration { _appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else"); _appData.CreateFile("Sites\\Another\\Settings.txt", "Name: Another\r\nDataProvider: SQLite2\r\nDataConnectionString: something else2"); - IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock().Object); + IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock().Object); var settings = loader.LoadSettings(); Assert.That(settings.Count(), Is.EqualTo(2)); @@ -62,7 +62,7 @@ namespace Orchard.Tests.Environment.Configuration { public void NewSettingsCanBeStored() { _appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else"); - IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock().Object); + IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock().Object); var foo = new ShellSettings {Name = "Foo", DataProvider = "Bar", DataConnectionString = "Quux"}; Assert.That(loader.LoadSettings().Count(), Is.EqualTo(1)); diff --git a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs index 06b637a0f..3c0814f86 100644 --- a/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs +++ b/src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs @@ -149,21 +149,11 @@ namespace Orchard.Tests.Environment { } - [Test] - public void DifferentShellInstanceShouldBeReturnedAfterEachCreate() { - var host = _lifetime.Resolve(); - var runtime1 = host.CreateShell_Obsolete(); - host.Reinitialize_Obsolete(); - var runtime2 = host.CreateShell_Obsolete(); - Assert.That(runtime1, Is.Not.SameAs(runtime2)); - } - - [Test] public void NormalDependenciesShouldBeUniquePerRequestContainer() { var host = _lifetime.Resolve(); var container1 = host.CreateShellContainer_Obsolete(); - host.Reinitialize_Obsolete(); + ((IShellDescriptorManagerEventHandler)host).Changed(null); var container2 = host.CreateShellContainer_Obsolete(); var requestContainer1a = container1.BeginLifetimeScope(); var requestContainer1b = container1.BeginLifetimeScope(); diff --git a/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs b/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs index 2d26f8f09..5f56cf48e 100644 --- a/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs +++ b/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs @@ -11,13 +11,13 @@ using Orchard.Localization; namespace Orchard.Core.Settings.Topology { public class ShellDescriptorManager : IShellDescriptorManager { private readonly IRepository _topologyRecordRepository; - private readonly IEventBus _eventBus; + private readonly IShellDescriptorManagerEventHandler _events; public ShellDescriptorManager( IRepository repository, - IEventBus eventBus) { + IShellDescriptorManagerEventHandler events) { _topologyRecordRepository = repository; - _eventBus = eventBus; + _events = events; T = NullLocalizer.Instance; } @@ -85,9 +85,7 @@ namespace Orchard.Core.Settings.Topology { }); } - _eventBus.Notify_Obsolete( - "ShellDescriptor_Changed", - null); + _events.Changed(GetShellTopologyDescriptorFromRecord(topologyRecord)); } } } diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj index 3a26b743b..029f401b2 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj @@ -66,7 +66,6 @@ - diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ShellSettingsEventHandler.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ShellSettingsEventHandler.cs deleted file mode 100644 index 6400702ad..000000000 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ShellSettingsEventHandler.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using Orchard.Events; -using Orchard.Environment.Configuration; -using Orchard.Environment; - -namespace Orchard.MultiTenancy.Services { - public class ShellSettingsEventHandler : IShellSettingsEventHandler, IDependency { - - private readonly IOrchardHost _orchardHost; - - public ShellSettingsEventHandler(IOrchardHost orchardHost) { - _orchardHost = orchardHost; - } - - public void Saved(ShellSettings settings) { - _orchardHost.InvalidateShells(); - } - } -} diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs index 3a1d4a812..7d2a87eac 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs @@ -2,18 +2,13 @@ using System.Linq; using Orchard.Environment; using Orchard.Environment.Configuration; -using Orchard.Events; namespace Orchard.MultiTenancy.Services { public class TenantService : ITenantService { private readonly IShellSettingsManager _shellSettingsManager; - private readonly IOrchardHost _orchardHost; - private readonly IShellSettingsEventHandler _shellSettingsEventHandler; - public TenantService(IShellSettingsManager shellSettingsManager, IOrchardHost orchardHost, IShellSettingsEventHandler shellSettingsEventHandler) { + public TenantService(IShellSettingsManager shellSettingsManager) { _shellSettingsManager = shellSettingsManager; - _orchardHost = orchardHost; - _shellSettingsEventHandler = shellSettingsEventHandler; } public IEnumerable GetTenants() { @@ -22,16 +17,13 @@ namespace Orchard.MultiTenancy.Services { public void CreateTenant(ShellSettings settings) { _shellSettingsManager.SaveSettings(settings); - _shellSettingsEventHandler.Saved(settings); } public void UpdateTenant(ShellSettings settings) { var tenant = GetTenants().FirstOrDefault(ss => ss.Name == settings.Name); if ( tenant != null ) { _shellSettingsManager.SaveSettings(settings); - _shellSettingsEventHandler.Saved(settings); } - } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs b/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs index 261bd8929..2c148d7c1 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs @@ -81,7 +81,6 @@ namespace Orchard.Setup.Controllers { "TinyMce", "Orchard.Modules", "Orchard.Themes", - "Orchard.MultiTenancy", "Orchard.Pages", "Orchard.Blogs", "Orchard.Comments"}; diff --git a/src/Orchard/Environment/Configuration/IShellSettingsManager.cs b/src/Orchard/Environment/Configuration/IShellSettingsManager.cs new file mode 100644 index 000000000..d58eedade --- /dev/null +++ b/src/Orchard/Environment/Configuration/IShellSettingsManager.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Orchard.Environment.Configuration { + public interface IShellSettingsManager { + IEnumerable LoadSettings(); + void SaveSettings(ShellSettings settings); + } +} \ No newline at end of file diff --git a/src/Orchard/Events/IShellSettingsEventHandler.cs b/src/Orchard/Environment/Configuration/IShellSettingsManagerEventHandler.cs similarity index 100% rename from src/Orchard/Events/IShellSettingsEventHandler.cs rename to src/Orchard/Environment/Configuration/IShellSettingsManagerEventHandler.cs diff --git a/src/Orchard/Environment/Configuration/ShellSettingsManager.cs b/src/Orchard/Environment/Configuration/ShellSettingsManager.cs index 1bb21e739..61156d7e9 100644 --- a/src/Orchard/Environment/Configuration/ShellSettingsManager.cs +++ b/src/Orchard/Environment/Configuration/ShellSettingsManager.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Yaml.Serialization; -using Orchard.Events; using Orchard.Localization; namespace Orchard.Environment.Configuration { @@ -14,12 +13,16 @@ namespace Orchard.Environment.Configuration { public class ShellSettingsManager : IShellSettingsManager { private readonly IAppDataFolder _appDataFolder; - private readonly IEventBus _eventBus; - Localizer T { get; set; } + private readonly IShellSettingsManagerEventHandler _events; - public ShellSettingsManager(IAppDataFolder appDataFolder, IEventBus eventBus) { + Localizer T { get; set; } + + public ShellSettingsManager( + IAppDataFolder appDataFolder, + IShellSettingsManagerEventHandler events) { _appDataFolder = appDataFolder; - _eventBus = eventBus; + _events = events; + T = NullLocalizer.Instance; } @@ -35,8 +38,7 @@ namespace Orchard.Environment.Configuration { var filePath = Path.Combine(Path.Combine("Sites", settings.Name), "Settings.txt"); _appDataFolder.CreateFile(filePath, ComposeSettings(settings)); - - _eventBus.Notify_Obsolete("ShellSettings_Saved", null); + _events.Saved(settings); } IEnumerable LoadSettings() { diff --git a/src/Orchard/Environment/DefaultOrchardHost.cs b/src/Orchard/Environment/DefaultOrchardHost.cs index 16a274c36..1ba354df6 100644 --- a/src/Orchard/Environment/DefaultOrchardHost.cs +++ b/src/Orchard/Environment/DefaultOrchardHost.cs @@ -6,14 +6,15 @@ using System.Collections.Generic; using Orchard.Environment.Configuration; using Orchard.Environment.Extensions; using Orchard.Environment.ShellBuilders; +using Orchard.Environment.Topology; +using Orchard.Environment.Topology.Models; using Orchard.Logging; using Orchard.Mvc; using Orchard.Mvc.ViewEngines; using Orchard.Utility.Extensions; -using Orchard.Events; namespace Orchard.Environment { - public class DefaultOrchardHost : IOrchardHost { + public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler { private readonly ControllerBuilder _controllerBuilder; private readonly IShellSettingsManager _shellSettingsManager; @@ -50,10 +51,6 @@ namespace Orchard.Environment { BuildCurrent(); } - void IOrchardHost.Reinitialize_Obsolete() { - _current = null; - } - void IOrchardHost.BeginRequest() { Logger.Debug("BeginRequest"); @@ -136,12 +133,12 @@ namespace Orchard.Environment { } } - public void Process(string messageName, IDictionary eventData) { - if (messageName == "ShellDescriptor_Changed") { - _current = null; - } + + void IShellSettingsManagerEventHandler.Saved(ShellSettings settings) { + _current = null; } - public void InvalidateShells() { + + void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor) { _current = null; } } diff --git a/src/Orchard/Environment/DefaultOrchardHostEventSink.cs b/src/Orchard/Environment/DefaultOrchardHostEventSink.cs index 9d0542e21..fa4f3ac4d 100644 --- a/src/Orchard/Environment/DefaultOrchardHostEventSink.cs +++ b/src/Orchard/Environment/DefaultOrchardHostEventSink.cs @@ -1,4 +1,8 @@ +using System; using System.Collections.Generic; +using Orchard.Environment.Configuration; +using Orchard.Environment.Topology; +using Orchard.Environment.Topology.Models; using Orchard.Events; namespace Orchard.Environment { @@ -7,17 +11,23 @@ namespace Orchard.Environment { /// The reason for this is to avoid adding IEventBusHandler, because DefaultOrchardHost is a component /// that should not be detected and registererd automatically as an IDependency. /// - public class DefaultOrchardHostEventSink : IEventBusHandler { - private readonly DefaultOrchardHost _host; + public class DefaultOrchardHostEventSink : IShellSettingsEventHandler, IShellDescriptorManagerEventHandler { + private readonly IShellSettingsEventHandler _shellSettingsEventHandler; + private readonly IShellDescriptorManagerEventHandler _shellDescriptorManagerEventHandler; public DefaultOrchardHostEventSink(IOrchardHost host) { - _host = host as DefaultOrchardHost; + _shellSettingsEventHandler = host as IShellSettingsEventHandler; + _shellDescriptorManagerEventHandler = host as IShellDescriptorManagerEventHandler; } - public void Process(string messageName, IDictionary eventData) { - if (_host != null) { - _host.Process(messageName, eventData); - } + void IShellSettingsEventHandler.Saved(ShellSettings settings) { + if (_shellSettingsEventHandler != null) + _shellSettingsEventHandler.Saved(settings); + } + + void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor) { + if (_shellDescriptorManagerEventHandler != null) + _shellDescriptorManagerEventHandler.Changed(descriptor); } } } diff --git a/src/Orchard/Environment/IOrchardHost.cs b/src/Orchard/Environment/IOrchardHost.cs index 80d6e6630..0a88e51bb 100644 --- a/src/Orchard/Environment/IOrchardHost.cs +++ b/src/Orchard/Environment/IOrchardHost.cs @@ -7,11 +7,6 @@ namespace Orchard.Environment { /// void Initialize(); - /// - /// Called when configuration changes requires the shell topology to be reloaded and applied - /// - void Reinitialize_Obsolete(); - /// /// Called each time a request begins to offer a just-in-time reinitialization point /// @@ -27,10 +22,5 @@ namespace Orchard.Environment { /// Services may be resolved from within this instance to configure and initialize it's storage. /// IStandaloneEnvironment CreateStandaloneEnvironment(ShellSettings shellSettings); - - /// - /// Resets Shell settings - /// - void InvalidateShells(); } } diff --git a/src/Orchard/Environment/Topology/IShellDescriptorManager.cs b/src/Orchard/Environment/Topology/IShellDescriptorManager.cs index 1a539c8c9..34b6c53e2 100644 --- a/src/Orchard/Environment/Topology/IShellDescriptorManager.cs +++ b/src/Orchard/Environment/Topology/IShellDescriptorManager.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Orchard.Environment.Topology.Models; +using Orchard.Events; namespace Orchard.Environment.Topology { /// @@ -24,5 +25,8 @@ namespace Orchard.Environment.Topology { IEnumerable parameters); } + public interface IShellDescriptorManagerEventHandler : IEventHandler { + void Changed(ShellDescriptor descriptor); + } }