Moving some code around for migration to new events mechanism

ShellSettings and ShellDescriptor string-named events removed
IShellSettingsManager and IShellDescriptorManager have associated event interfaces
Orchard host event sink forwards those two interfaces to default orchard host (special case - orchard host can't enlist normally)

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-05-12 19:28:18 -07:00
parent c384bae408
commit 49d29db0ca
14 changed files with 55 additions and 85 deletions

View File

@@ -28,7 +28,7 @@ namespace Orchard.Tests.Environment.Configuration {
_appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else"); _appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IEventBus>().Object); IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IShellSettingsEventHandler>().Object);
var settings = loader.LoadSettings().Single(); var settings = loader.LoadSettings().Single();
Assert.That(settings, Is.Not.Null); Assert.That(settings, Is.Not.Null);
Assert.That(settings.Name, Is.EqualTo("Default")); 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\\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"); _appData.CreateFile("Sites\\Another\\Settings.txt", "Name: Another\r\nDataProvider: SQLite2\r\nDataConnectionString: something else2");
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IEventBus>().Object); IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IShellSettingsEventHandler>().Object);
var settings = loader.LoadSettings(); var settings = loader.LoadSettings();
Assert.That(settings.Count(), Is.EqualTo(2)); Assert.That(settings.Count(), Is.EqualTo(2));
@@ -62,7 +62,7 @@ namespace Orchard.Tests.Environment.Configuration {
public void NewSettingsCanBeStored() { public void NewSettingsCanBeStored() {
_appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else"); _appData.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IEventBus>().Object); IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IShellSettingsEventHandler>().Object);
var foo = new ShellSettings {Name = "Foo", DataProvider = "Bar", DataConnectionString = "Quux"}; var foo = new ShellSettings {Name = "Foo", DataProvider = "Bar", DataConnectionString = "Quux"};
Assert.That(loader.LoadSettings().Count(), Is.EqualTo(1)); Assert.That(loader.LoadSettings().Count(), Is.EqualTo(1));

View File

@@ -149,21 +149,11 @@ namespace Orchard.Tests.Environment {
} }
[Test]
public void DifferentShellInstanceShouldBeReturnedAfterEachCreate() {
var host = _lifetime.Resolve<IOrchardHost>();
var runtime1 = host.CreateShell_Obsolete();
host.Reinitialize_Obsolete();
var runtime2 = host.CreateShell_Obsolete();
Assert.That(runtime1, Is.Not.SameAs(runtime2));
}
[Test] [Test]
public void NormalDependenciesShouldBeUniquePerRequestContainer() { public void NormalDependenciesShouldBeUniquePerRequestContainer() {
var host = _lifetime.Resolve<IOrchardHost>(); var host = _lifetime.Resolve<IOrchardHost>();
var container1 = host.CreateShellContainer_Obsolete(); var container1 = host.CreateShellContainer_Obsolete();
host.Reinitialize_Obsolete(); ((IShellDescriptorManagerEventHandler)host).Changed(null);
var container2 = host.CreateShellContainer_Obsolete(); var container2 = host.CreateShellContainer_Obsolete();
var requestContainer1a = container1.BeginLifetimeScope(); var requestContainer1a = container1.BeginLifetimeScope();
var requestContainer1b = container1.BeginLifetimeScope(); var requestContainer1b = container1.BeginLifetimeScope();

View File

@@ -11,13 +11,13 @@ using Orchard.Localization;
namespace Orchard.Core.Settings.Topology { namespace Orchard.Core.Settings.Topology {
public class ShellDescriptorManager : IShellDescriptorManager { public class ShellDescriptorManager : IShellDescriptorManager {
private readonly IRepository<TopologyRecord> _topologyRecordRepository; private readonly IRepository<TopologyRecord> _topologyRecordRepository;
private readonly IEventBus _eventBus; private readonly IShellDescriptorManagerEventHandler _events;
public ShellDescriptorManager( public ShellDescriptorManager(
IRepository<TopologyRecord> repository, IRepository<TopologyRecord> repository,
IEventBus eventBus) { IShellDescriptorManagerEventHandler events) {
_topologyRecordRepository = repository; _topologyRecordRepository = repository;
_eventBus = eventBus; _events = events;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
@@ -85,9 +85,7 @@ namespace Orchard.Core.Settings.Topology {
}); });
} }
_eventBus.Notify_Obsolete( _events.Changed(GetShellTopologyDescriptorFromRecord(topologyRecord));
"ShellDescriptor_Changed",
null);
} }
} }
} }

View File

@@ -66,7 +66,6 @@
<Compile Include="Controllers\AdminController.cs" /> <Compile Include="Controllers\AdminController.cs" />
<Compile Include="Extensions\UrlHelperExtensions.cs" /> <Compile Include="Extensions\UrlHelperExtensions.cs" />
<Compile Include="Services\ITenantService.cs" /> <Compile Include="Services\ITenantService.cs" />
<Compile Include="Services\ShellSettingsEventHandler.cs" />
<Compile Include="Services\TenantService.cs" /> <Compile Include="Services\TenantService.cs" />
<Compile Include="ViewModels\TenantsAddViewModel.cs" /> <Compile Include="ViewModels\TenantsAddViewModel.cs" />
<Compile Include="ViewModels\TenantsIndexViewModel.cs" /> <Compile Include="ViewModels\TenantsIndexViewModel.cs" />

View File

@@ -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();
}
}
}

View File

@@ -2,18 +2,13 @@
using System.Linq; using System.Linq;
using Orchard.Environment; using Orchard.Environment;
using Orchard.Environment.Configuration; using Orchard.Environment.Configuration;
using Orchard.Events;
namespace Orchard.MultiTenancy.Services { namespace Orchard.MultiTenancy.Services {
public class TenantService : ITenantService { public class TenantService : ITenantService {
private readonly IShellSettingsManager _shellSettingsManager; 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; _shellSettingsManager = shellSettingsManager;
_orchardHost = orchardHost;
_shellSettingsEventHandler = shellSettingsEventHandler;
} }
public IEnumerable<ShellSettings> GetTenants() { public IEnumerable<ShellSettings> GetTenants() {
@@ -22,16 +17,13 @@ namespace Orchard.MultiTenancy.Services {
public void CreateTenant(ShellSettings settings) { public void CreateTenant(ShellSettings settings) {
_shellSettingsManager.SaveSettings(settings); _shellSettingsManager.SaveSettings(settings);
_shellSettingsEventHandler.Saved(settings);
} }
public void UpdateTenant(ShellSettings settings) { public void UpdateTenant(ShellSettings settings) {
var tenant = GetTenants().FirstOrDefault(ss => ss.Name == settings.Name); var tenant = GetTenants().FirstOrDefault(ss => ss.Name == settings.Name);
if ( tenant != null ) { if ( tenant != null ) {
_shellSettingsManager.SaveSettings(settings); _shellSettingsManager.SaveSettings(settings);
_shellSettingsEventHandler.Saved(settings);
} }
} }
} }
} }

View File

@@ -81,7 +81,6 @@ namespace Orchard.Setup.Controllers {
"TinyMce", "TinyMce",
"Orchard.Modules", "Orchard.Modules",
"Orchard.Themes", "Orchard.Themes",
"Orchard.MultiTenancy",
"Orchard.Pages", "Orchard.Pages",
"Orchard.Blogs", "Orchard.Blogs",
"Orchard.Comments"}; "Orchard.Comments"};

View File

@@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Orchard.Environment.Configuration {
public interface IShellSettingsManager {
IEnumerable<ShellSettings> LoadSettings();
void SaveSettings(ShellSettings settings);
}
}

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Yaml.Serialization; using System.Yaml.Serialization;
using Orchard.Events;
using Orchard.Localization; using Orchard.Localization;
namespace Orchard.Environment.Configuration { namespace Orchard.Environment.Configuration {
@@ -14,12 +13,16 @@ namespace Orchard.Environment.Configuration {
public class ShellSettingsManager : IShellSettingsManager { public class ShellSettingsManager : IShellSettingsManager {
private readonly IAppDataFolder _appDataFolder; private readonly IAppDataFolder _appDataFolder;
private readonly IEventBus _eventBus; private readonly IShellSettingsManagerEventHandler _events;
Localizer T { get; set; }
public ShellSettingsManager(IAppDataFolder appDataFolder, IEventBus eventBus) { Localizer T { get; set; }
public ShellSettingsManager(
IAppDataFolder appDataFolder,
IShellSettingsManagerEventHandler events) {
_appDataFolder = appDataFolder; _appDataFolder = appDataFolder;
_eventBus = eventBus; _events = events;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
@@ -35,8 +38,7 @@ namespace Orchard.Environment.Configuration {
var filePath = Path.Combine(Path.Combine("Sites", settings.Name), "Settings.txt"); var filePath = Path.Combine(Path.Combine("Sites", settings.Name), "Settings.txt");
_appDataFolder.CreateFile(filePath, ComposeSettings(settings)); _appDataFolder.CreateFile(filePath, ComposeSettings(settings));
_events.Saved(settings);
_eventBus.Notify_Obsolete("ShellSettings_Saved", null);
} }
IEnumerable<ShellSettings> LoadSettings() { IEnumerable<ShellSettings> LoadSettings() {

View File

@@ -6,14 +6,15 @@ using System.Collections.Generic;
using Orchard.Environment.Configuration; using Orchard.Environment.Configuration;
using Orchard.Environment.Extensions; using Orchard.Environment.Extensions;
using Orchard.Environment.ShellBuilders; using Orchard.Environment.ShellBuilders;
using Orchard.Environment.Topology;
using Orchard.Environment.Topology.Models;
using Orchard.Logging; using Orchard.Logging;
using Orchard.Mvc; using Orchard.Mvc;
using Orchard.Mvc.ViewEngines; using Orchard.Mvc.ViewEngines;
using Orchard.Utility.Extensions; using Orchard.Utility.Extensions;
using Orchard.Events;
namespace Orchard.Environment { namespace Orchard.Environment {
public class DefaultOrchardHost : IOrchardHost { public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler {
private readonly ControllerBuilder _controllerBuilder; private readonly ControllerBuilder _controllerBuilder;
private readonly IShellSettingsManager _shellSettingsManager; private readonly IShellSettingsManager _shellSettingsManager;
@@ -50,10 +51,6 @@ namespace Orchard.Environment {
BuildCurrent(); BuildCurrent();
} }
void IOrchardHost.Reinitialize_Obsolete() {
_current = null;
}
void IOrchardHost.BeginRequest() { void IOrchardHost.BeginRequest() {
Logger.Debug("BeginRequest"); Logger.Debug("BeginRequest");
@@ -136,12 +133,12 @@ namespace Orchard.Environment {
} }
} }
public void Process(string messageName, IDictionary<string, string> eventData) {
if (messageName == "ShellDescriptor_Changed") { void IShellSettingsManagerEventHandler.Saved(ShellSettings settings) {
_current = null; _current = null;
}
} }
public void InvalidateShells() {
void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor) {
_current = null; _current = null;
} }
} }

View File

@@ -1,4 +1,8 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Orchard.Environment.Configuration;
using Orchard.Environment.Topology;
using Orchard.Environment.Topology.Models;
using Orchard.Events; using Orchard.Events;
namespace Orchard.Environment { namespace Orchard.Environment {
@@ -7,17 +11,23 @@ namespace Orchard.Environment {
/// The reason for this is to avoid adding IEventBusHandler, because DefaultOrchardHost is a component /// 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. /// that should not be detected and registererd automatically as an IDependency.
/// </summary> /// </summary>
public class DefaultOrchardHostEventSink : IEventBusHandler { public class DefaultOrchardHostEventSink : IShellSettingsEventHandler, IShellDescriptorManagerEventHandler {
private readonly DefaultOrchardHost _host; private readonly IShellSettingsEventHandler _shellSettingsEventHandler;
private readonly IShellDescriptorManagerEventHandler _shellDescriptorManagerEventHandler;
public DefaultOrchardHostEventSink(IOrchardHost host) { public DefaultOrchardHostEventSink(IOrchardHost host) {
_host = host as DefaultOrchardHost; _shellSettingsEventHandler = host as IShellSettingsEventHandler;
_shellDescriptorManagerEventHandler = host as IShellDescriptorManagerEventHandler;
} }
public void Process(string messageName, IDictionary<string, string> eventData) { void IShellSettingsEventHandler.Saved(ShellSettings settings) {
if (_host != null) { if (_shellSettingsEventHandler != null)
_host.Process(messageName, eventData); _shellSettingsEventHandler.Saved(settings);
} }
void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor) {
if (_shellDescriptorManagerEventHandler != null)
_shellDescriptorManagerEventHandler.Changed(descriptor);
} }
} }
} }

View File

@@ -7,11 +7,6 @@ namespace Orchard.Environment {
/// </summary> /// </summary>
void Initialize(); void Initialize();
/// <summary>
/// Called when configuration changes requires the shell topology to be reloaded and applied
/// </summary>
void Reinitialize_Obsolete();
/// <summary> /// <summary>
/// Called each time a request begins to offer a just-in-time reinitialization point /// Called each time a request begins to offer a just-in-time reinitialization point
/// </summary> /// </summary>
@@ -27,10 +22,5 @@ namespace Orchard.Environment {
/// Services may be resolved from within this instance to configure and initialize it's storage. /// Services may be resolved from within this instance to configure and initialize it's storage.
/// </summary> /// </summary>
IStandaloneEnvironment CreateStandaloneEnvironment(ShellSettings shellSettings); IStandaloneEnvironment CreateStandaloneEnvironment(ShellSettings shellSettings);
/// <summary>
/// Resets Shell settings
/// </summary>
void InvalidateShells();
} }
} }

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using Orchard.Environment.Topology.Models; using Orchard.Environment.Topology.Models;
using Orchard.Events;
namespace Orchard.Environment.Topology { namespace Orchard.Environment.Topology {
/// <summary> /// <summary>
@@ -24,5 +25,8 @@ namespace Orchard.Environment.Topology {
IEnumerable<ShellParameter> parameters); IEnumerable<ShellParameter> parameters);
} }
public interface IShellDescriptorManagerEventHandler : IEventHandler {
void Changed(ShellDescriptor descriptor);
}
} }