mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
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:
@@ -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));
|
||||||
|
@@ -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();
|
||||||
|
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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" />
|
||||||
|
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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"};
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Orchard.Environment.Configuration {
|
||||||
|
public interface IShellSettingsManager {
|
||||||
|
IEnumerable<ShellSettings> LoadSettings();
|
||||||
|
void SaveSettings(ShellSettings settings);
|
||||||
|
}
|
||||||
|
}
|
@@ -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() {
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user