- 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
This commit is contained in:
Suha Can
2010-05-10 16:34:53 -07:00
parent fa6ac5f0dd
commit 6d960c86d9
9 changed files with 25 additions and 10 deletions

View File

@@ -22,10 +22,14 @@ namespace Orchard.Tests.Modules.Settings.Topology {
public string LastMessageName { get; set; }
public IDictionary<string, string> LastEventData { get; set; }
public void Notify(string messageName, IDictionary<string, string> eventData) {
public void Notify_Obsolete(string messageName, IDictionary<string, string> eventData) {
LastMessageName = messageName;
LastEventData = eventData;
}
public void Notify(string messageName, Dictionary<string, object> eventData) {
throw new NotImplementedException();
}
}
protected override IEnumerable<Type> DatabaseTypes {

View File

@@ -23,7 +23,7 @@ namespace Orchard.Tests.Events {
[Test]
public void EventsAreCorrectlyDispatchedToHandlers() {
Assert.That(_eventBusHandler.LastMessageName, Is.Null);
_eventBus.Notify("Notification", new Dictionary<string, string>());
_eventBus.Notify_Obsolete("Notification", new Dictionary<string, string>());
Assert.That(_eventBusHandler.LastMessageName, Is.EqualTo("Notification"));
}

View File

@@ -85,7 +85,7 @@ namespace Orchard.Core.Settings.Topology {
});
}
_eventBus.Notify(
_eventBus.Notify_Obsolete(
"ShellDescriptor_Changed",
null);
}

View File

@@ -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<ShellSettings> LoadSettings() {

View File

@@ -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)

View File

@@ -5,9 +5,11 @@ using Orchard.Logging;
namespace Orchard.Events {
public class DefaultOrchardEventBus : IEventBus {
private readonly Func<IEnumerable<IEventBusHandler>> _handlers;
private readonly IEnumerable<IEventHandler> _eventHandlers;
public DefaultOrchardEventBus(Func<IEnumerable<IEventBusHandler>> handlers) {
public DefaultOrchardEventBus(Func<IEnumerable<IEventBusHandler>> handlers, IEnumerable<IEventHandler> 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<string, string> eventData) {
public void Notify_Obsolete(string messageName, IDictionary<string, string> eventData) {
_handlers().Invoke(handler => handler.Process(messageName, eventData), Logger);
}
public void Notify(string messageName, Dictionary<string, object> eventData) {
}
#endregion
}
}

View File

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

View File

@@ -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(

View File

@@ -2,6 +2,7 @@
namespace Orchard.Events {
public interface IEventBus : IDependency {
void Notify(string messageName, IDictionary<string, string> eventData);
void Notify_Obsolete(string messageName, IDictionary<string, string> eventData);
void Notify(string messageName, Dictionary<string, object> eventData);
}
}