diff --git a/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs b/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs index 63233a045..6c41371af 100644 --- a/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs +++ b/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs @@ -15,20 +15,19 @@ namespace Orchard.Tests.Modules.Settings.Topology { public override void Register(ContainerBuilder builder) { builder.RegisterType().As(); builder.RegisterType().As().SingleInstance(); - + builder.RegisterSource(new EventsRegistrationSource()); } public class StubEventBus : IEventBus { public string LastMessageName { get; set; } - public IDictionary LastEventData { get; set; } + public IDictionary LastEventData { get; set; } public void Notify_Obsolete(string messageName, IDictionary eventData) { - LastMessageName = messageName; - LastEventData = eventData; } - public void Notify(string messageName, Dictionary eventData) { - throw new NotImplementedException(); + public void Notify(string messageName, Dictionary eventData) { + LastMessageName = messageName; + LastEventData = eventData; } } @@ -141,7 +140,7 @@ namespace Orchard.Tests.Modules.Settings.Topology { Enumerable.Empty(), Enumerable.Empty()); - Assert.That(eventBus.LastMessageName, Is.EqualTo("ShellDescriptor_Changed")); + Assert.That(eventBus.LastMessageName, Is.EqualTo("IShellDescriptorManagerEventHandler.Changed")); } } } diff --git a/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs b/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs index ae0a59102..48e77c1fa 100644 --- a/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs +++ b/src/Orchard.Tests/Environment/Configuration/DefaultTenantManagerTests.cs @@ -3,7 +3,6 @@ using System.Linq; using Moq; using NUnit.Framework; using Orchard.Environment.Configuration; -using Orchard.Events; namespace Orchard.Tests.Environment.Configuration { [TestFixture] @@ -28,7 +27,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 +42,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 +61,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/Stubs/StubHttpContext.cs b/src/Orchard.Tests/Stubs/StubHttpContext.cs index df66a262a..0337c90fe 100644 --- a/src/Orchard.Tests/Stubs/StubHttpContext.cs +++ b/src/Orchard.Tests/Stubs/StubHttpContext.cs @@ -12,10 +12,12 @@ namespace Orchard.Tests.Stubs { public StubHttpContext() { _appRelativeCurrentExecutionFilePath = "~/yadda"; + _hostHeader = "localhost"; } public StubHttpContext(string appRelativeCurrentExecutionFilePath) { _appRelativeCurrentExecutionFilePath = appRelativeCurrentExecutionFilePath; + _hostHeader = "localhost"; } public StubHttpContext(string appRelativeCurrentExecutionFilePath, string hostHeader) { @@ -38,6 +40,7 @@ namespace Orchard.Tests.Stubs { class StubHttpRequest : HttpRequestBase { private readonly StubHttpContext _httpContext; private NameValueCollection _serverVariables; + private NameValueCollection _headers; public StubHttpRequest(StubHttpContext httpContext) { _httpContext = httpContext; @@ -54,7 +57,12 @@ namespace Orchard.Tests.Stubs { public override string PathInfo { get { return ""; } } - + public override NameValueCollection Headers { + get { + return _headers = _headers + ?? new NameValueCollection { { "Host", _httpContext._hostHeader } }; + } + } public override NameValueCollection ServerVariables { get { return _serverVariables = _serverVariables diff --git a/src/Orchard/Environment/Configuration/IShellSettingsManagerEventHandler.cs b/src/Orchard/Environment/Configuration/IShellSettingsManagerEventHandler.cs index a32e0448c..f0aff295d 100644 --- a/src/Orchard/Environment/Configuration/IShellSettingsManagerEventHandler.cs +++ b/src/Orchard/Environment/Configuration/IShellSettingsManagerEventHandler.cs @@ -1,7 +1,7 @@ -using Orchard.Environment.Configuration; +using Orchard.Events; -namespace Orchard.Events { - public interface IShellSettingsEventHandler : IEventHandler { +namespace Orchard.Environment.Configuration { + public interface IShellSettingsManagerEventHandler : IEventHandler { void Saved(ShellSettings settings); } -} +} \ No newline at end of file diff --git a/src/Orchard/Environment/Configuration/ShellSettingsManager.cs b/src/Orchard/Environment/Configuration/ShellSettingsManager.cs index 61156d7e9..9604f4855 100644 --- a/src/Orchard/Environment/Configuration/ShellSettingsManager.cs +++ b/src/Orchard/Environment/Configuration/ShellSettingsManager.cs @@ -6,11 +6,6 @@ using System.Yaml.Serialization; using Orchard.Localization; namespace Orchard.Environment.Configuration { - public interface IShellSettingsManager { - IEnumerable LoadSettings(); - void SaveSettings(ShellSettings settings); - } - public class ShellSettingsManager : IShellSettingsManager { private readonly IAppDataFolder _appDataFolder; private readonly IShellSettingsManagerEventHandler _events; diff --git a/src/Orchard/Environment/DefaultOrchardHostEventSink.cs b/src/Orchard/Environment/DefaultOrchardHostEventSink.cs deleted file mode 100644 index fa4f3ac4d..000000000 --- a/src/Orchard/Environment/DefaultOrchardHostEventSink.cs +++ /dev/null @@ -1,33 +0,0 @@ -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 { - /// - /// This handler forwards calls to the IOrchardHost when it is an instance of DefaultOrchardHost. - /// 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 : IShellSettingsEventHandler, IShellDescriptorManagerEventHandler { - private readonly IShellSettingsEventHandler _shellSettingsEventHandler; - private readonly IShellDescriptorManagerEventHandler _shellDescriptorManagerEventHandler; - - public DefaultOrchardHostEventSink(IOrchardHost host) { - _shellSettingsEventHandler = host as IShellSettingsEventHandler; - _shellDescriptorManagerEventHandler = host as IShellDescriptorManagerEventHandler; - } - - 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/OrchardStarter.cs b/src/Orchard/Environment/OrchardStarter.cs index b2ca7ad74..5d959d057 100644 --- a/src/Orchard/Environment/OrchardStarter.cs +++ b/src/Orchard/Environment/OrchardStarter.cs @@ -20,12 +20,13 @@ namespace Orchard.Environment { public static IContainer CreateHostContainer(Action registrations) { var builder = new ContainerBuilder(); builder.RegisterModule(new LoggingModule()); + builder.RegisterModule(new EventsModule()); // a single default host implementation is needed for bootstrapping a web app domain builder.RegisterType().As().SingleInstance(); builder.RegisterType().As().SingleInstance(); - builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().As().SingleInstance(); { builder.RegisterType().As().SingleInstance(); diff --git a/src/Orchard/Environment/Topology/CompositionStrategy.cs b/src/Orchard/Environment/Topology/CompositionStrategy.cs index d50313f7f..f6dcd70fc 100644 --- a/src/Orchard/Environment/Topology/CompositionStrategy.cs +++ b/src/Orchard/Environment/Topology/CompositionStrategy.cs @@ -67,6 +67,7 @@ namespace Orchard.Environment.Topology { ExportedTypes = typeof(OrchardStarter).Assembly.GetExportedTypes() .Where(t => t.IsClass && !t.IsAbstract) + .Except(new[] { typeof(DefaultOrchardHost) }) .ToArray() }; } diff --git a/src/Orchard/Events/DefaultOrchardEventBus.cs b/src/Orchard/Events/DefaultOrchardEventBus.cs index bcc835836..8fac5d6ab 100644 --- a/src/Orchard/Events/DefaultOrchardEventBus.cs +++ b/src/Orchard/Events/DefaultOrchardEventBus.cs @@ -34,7 +34,8 @@ namespace Orchard.Events { string interfaceName = parameters[0]; string methodName = parameters[1]; - foreach (var eventHandler in _eventHandlers()) { + var eventHandlers = _eventHandlers(); + foreach (var eventHandler in eventHandlers) { TryInvoke(eventHandler, interfaceName, methodName, eventData); } } @@ -43,14 +44,14 @@ namespace Orchard.Events { Type type = eventHandler.GetType(); foreach (var interfaceType in type.GetInterfaces()) { if (String.Equals(interfaceType.Name, interfaceName, StringComparison.OrdinalIgnoreCase)) { - TryInvokeMethod(eventHandler, methodName, arguments); + TryInvokeMethod(eventHandler, interfaceType, methodName, arguments); break; } } } - private static void TryInvokeMethod(IEventHandler eventHandler, string methodName, IDictionary arguments) { - MethodInfo method = GetMatchingMethod(eventHandler, methodName, arguments); + private static void TryInvokeMethod(IEventHandler eventHandler, Type interfaceType, string methodName, IDictionary arguments) { + MethodInfo method = GetMatchingMethod(eventHandler, interfaceType, methodName, arguments); if (method != null) { List parameters = new List(); foreach (var methodParameter in method.GetParameters()) { @@ -60,8 +61,8 @@ namespace Orchard.Events { } } - private static MethodInfo GetMatchingMethod(IEventHandler eventHandler, string methodName, IDictionary arguments) { - List allMethods = new List(eventHandler.GetType().GetMethods()); + private static MethodInfo GetMatchingMethod(IEventHandler eventHandler, Type interfaceType, string methodName, IDictionary arguments) { + List allMethods = new List(interfaceType.GetMethods()); List candidates = new List(allMethods); foreach (var method in allMethods) { diff --git a/src/Orchard/Events/EventsModule.cs b/src/Orchard/Events/EventsModule.cs index 2aa10ef52..3cbbfa388 100644 --- a/src/Orchard/Events/EventsModule.cs +++ b/src/Orchard/Events/EventsModule.cs @@ -1,7 +1,7 @@ using Autofac; namespace Orchard.Events { - public class EventsModule : Module { + internal class EventsModule : Module { protected override void Load(ContainerBuilder builder) { builder.RegisterSource(new EventsRegistrationSource()); base.Load(builder); diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 7f7d0d197..06774acad 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -162,8 +162,8 @@ + - @@ -184,7 +184,7 @@ - +