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");
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IEventBus>().Object);
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IShellSettingsEventHandler>().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<IEventBus>().Object);
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IShellSettingsEventHandler>().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<IEventBus>().Object);
IShellSettingsManager loader = new ShellSettingsManager(_appData, new Mock<IShellSettingsEventHandler>().Object);
var foo = new ShellSettings {Name = "Foo", DataProvider = "Bar", DataConnectionString = "Quux"};
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]
public void NormalDependenciesShouldBeUniquePerRequestContainer() {
var host = _lifetime.Resolve<IOrchardHost>();
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();

View File

@@ -11,13 +11,13 @@ using Orchard.Localization;
namespace Orchard.Core.Settings.Topology {
public class ShellDescriptorManager : IShellDescriptorManager {
private readonly IRepository<TopologyRecord> _topologyRecordRepository;
private readonly IEventBus _eventBus;
private readonly IShellDescriptorManagerEventHandler _events;
public ShellDescriptorManager(
IRepository<TopologyRecord> 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));
}
}
}

View File

@@ -66,7 +66,6 @@
<Compile Include="Controllers\AdminController.cs" />
<Compile Include="Extensions\UrlHelperExtensions.cs" />
<Compile Include="Services\ITenantService.cs" />
<Compile Include="Services\ShellSettingsEventHandler.cs" />
<Compile Include="Services\TenantService.cs" />
<Compile Include="ViewModels\TenantsAddViewModel.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 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<ShellSettings> 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);
}
}
}
}

View File

@@ -81,7 +81,6 @@ namespace Orchard.Setup.Controllers {
"TinyMce",
"Orchard.Modules",
"Orchard.Themes",
"Orchard.MultiTenancy",
"Orchard.Pages",
"Orchard.Blogs",
"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.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<ShellSettings> LoadSettings() {

View File

@@ -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<string, string> eventData) {
if (messageName == "ShellDescriptor_Changed") {
_current = null;
}
void IShellSettingsManagerEventHandler.Saved(ShellSettings settings) {
_current = null;
}
public void InvalidateShells() {
void IShellDescriptorManagerEventHandler.Changed(ShellDescriptor descriptor) {
_current = null;
}
}

View File

@@ -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.
/// </summary>
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<string, string> 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);
}
}
}

View File

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

View File

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