From 6d960c86d939facbdca0852fac49c1a2643462ea Mon Sep 17 00:00:00 2001 From: Suha Can Date: Mon, 10 May 2010 16:34:53 -0700 Subject: [PATCH] - Building up registrations for event handlers in the system in the ShellContainerFactory. - Obsoleting the old IEventBus.Notify and getting in the list of IEventHandlers. --HG-- branch : dev --- .../Settings/Topology/ShellDescriptorManagerTests.cs | 6 +++++- src/Orchard.Tests/Events/EventTests.cs | 2 +- .../Core/Settings/Topology/ShellDescriptorManager.cs | 2 +- .../Environment/Configuration/ShellSettingsManager.cs | 2 +- .../Environment/ShellBuilders/ShellContainerFactory.cs | 5 +++++ src/Orchard/Events/DefaultOrchardEventBus.cs | 9 +++++++-- src/Orchard/Events/EventsInterceptor.cs | 4 ++-- src/Orchard/Events/EventsRegistrationSource.cs | 2 +- src/Orchard/Events/IEventBus.cs | 3 ++- 9 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs b/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs index 17175465e..63233a045 100644 --- a/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs +++ b/src/Orchard.Tests.Modules/Settings/Topology/ShellDescriptorManagerTests.cs @@ -22,10 +22,14 @@ namespace Orchard.Tests.Modules.Settings.Topology { public string LastMessageName { get; set; } public IDictionary LastEventData { get; set; } - public void Notify(string messageName, IDictionary eventData) { + public void Notify_Obsolete(string messageName, IDictionary eventData) { LastMessageName = messageName; LastEventData = eventData; } + + public void Notify(string messageName, Dictionary eventData) { + throw new NotImplementedException(); + } } protected override IEnumerable DatabaseTypes { diff --git a/src/Orchard.Tests/Events/EventTests.cs b/src/Orchard.Tests/Events/EventTests.cs index 58648fa80..066794322 100644 --- a/src/Orchard.Tests/Events/EventTests.cs +++ b/src/Orchard.Tests/Events/EventTests.cs @@ -23,7 +23,7 @@ namespace Orchard.Tests.Events { [Test] public void EventsAreCorrectlyDispatchedToHandlers() { Assert.That(_eventBusHandler.LastMessageName, Is.Null); - _eventBus.Notify("Notification", new Dictionary()); + _eventBus.Notify_Obsolete("Notification", new Dictionary()); Assert.That(_eventBusHandler.LastMessageName, Is.EqualTo("Notification")); } diff --git a/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs b/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs index 98bcddd67..2d26f8f09 100644 --- a/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs +++ b/src/Orchard.Web/Core/Settings/Topology/ShellDescriptorManager.cs @@ -85,7 +85,7 @@ namespace Orchard.Core.Settings.Topology { }); } - _eventBus.Notify( + _eventBus.Notify_Obsolete( "ShellDescriptor_Changed", null); } diff --git a/src/Orchard/Environment/Configuration/ShellSettingsManager.cs b/src/Orchard/Environment/Configuration/ShellSettingsManager.cs index 0267bc955..1bb21e739 100644 --- a/src/Orchard/Environment/Configuration/ShellSettingsManager.cs +++ b/src/Orchard/Environment/Configuration/ShellSettingsManager.cs @@ -36,7 +36,7 @@ namespace Orchard.Environment.Configuration { var filePath = Path.Combine(Path.Combine("Sites", settings.Name), "Settings.txt"); _appDataFolder.CreateFile(filePath, ComposeSettings(settings)); - _eventBus.Notify("ShellSettings_Saved", null); + _eventBus.Notify_Obsolete("ShellSettings_Saved", null); } IEnumerable LoadSettings() { diff --git a/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs index 2db70da88..5c4f7da10 100644 --- a/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs @@ -12,6 +12,7 @@ using Autofac.Integration.Web.Mvc; using Orchard.Environment.AutofacUtil.DynamicProxy2; using Orchard.Environment.Configuration; using Orchard.Environment.Topology.Models; +using Orchard.Events; namespace Orchard.Environment.ShellBuilders { @@ -71,6 +72,10 @@ namespace Orchard.Environment.ShellBuilders { } } + if (typeof(IEventHandler).IsAssignableFrom(item.Type)) { + registration = registration.As(typeof(IEventHandler)); + } + foreach (var parameter in item.Parameters) { registration = registration .WithParameter(parameter.Name, parameter.Value) diff --git a/src/Orchard/Events/DefaultOrchardEventBus.cs b/src/Orchard/Events/DefaultOrchardEventBus.cs index 820b1fa55..3ea3e975b 100644 --- a/src/Orchard/Events/DefaultOrchardEventBus.cs +++ b/src/Orchard/Events/DefaultOrchardEventBus.cs @@ -5,9 +5,11 @@ using Orchard.Logging; namespace Orchard.Events { public class DefaultOrchardEventBus : IEventBus { private readonly Func> _handlers; + private readonly IEnumerable _eventHandlers; - public DefaultOrchardEventBus(Func> handlers) { + public DefaultOrchardEventBus(Func> handlers, IEnumerable eventHandlers) { _handlers = handlers; + _eventHandlers = eventHandlers; Logger = NullLogger.Instance; } @@ -15,10 +17,13 @@ namespace Orchard.Events { #region Implementation of IEventBus - public void Notify(string messageName, IDictionary eventData) { + public void Notify_Obsolete(string messageName, IDictionary eventData) { _handlers().Invoke(handler => handler.Process(messageName, eventData), Logger); } + public void Notify(string messageName, Dictionary eventData) { + } + #endregion } } diff --git a/src/Orchard/Events/EventsInterceptor.cs b/src/Orchard/Events/EventsInterceptor.cs index 0c71265fe..f40fbdbbb 100644 --- a/src/Orchard/Events/EventsInterceptor.cs +++ b/src/Orchard/Events/EventsInterceptor.cs @@ -15,9 +15,9 @@ namespace Orchard.Events { var data = invocation.Method.GetParameters() .Select((parameter, index) => new { parameter.Name, Value = invocation.Arguments[index] }) - .ToDictionary(kv => kv.Name, kv => kv.Value.ToString()); + .ToDictionary(kv => kv.Name, kv => kv.Value); - _eventBus.Notify(interfaceName + "_" + methodName, data); + _eventBus.Notify(interfaceName + "." + methodName, data); } } } diff --git a/src/Orchard/Events/EventsRegistrationSource.cs b/src/Orchard/Events/EventsRegistrationSource.cs index e39d7fe51..3a09cc77b 100644 --- a/src/Orchard/Events/EventsRegistrationSource.cs +++ b/src/Orchard/Events/EventsRegistrationSource.cs @@ -20,7 +20,7 @@ namespace Orchard.Events { yield break; var serviceType = serviceWithType.ServiceType; - if (!serviceType.IsInterface || !typeof(IEventHandler).IsAssignableFrom(serviceType)) + if (!serviceType.IsInterface || !typeof(IEventHandler).IsAssignableFrom(serviceType) || serviceType == typeof(IEventHandler)) yield break; var interfaceProxyType = _proxyBuilder.CreateInterfaceProxyTypeWithoutTarget( diff --git a/src/Orchard/Events/IEventBus.cs b/src/Orchard/Events/IEventBus.cs index 56dafe0eb..46cb7f214 100644 --- a/src/Orchard/Events/IEventBus.cs +++ b/src/Orchard/Events/IEventBus.cs @@ -2,6 +2,7 @@ namespace Orchard.Events { public interface IEventBus : IDependency { - void Notify(string messageName, IDictionary eventData); + void Notify_Obsolete(string messageName, IDictionary eventData); + void Notify(string messageName, Dictionary eventData); } }