mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
- 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:
@@ -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 {
|
||||
|
@@ -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"));
|
||||
}
|
||||
|
||||
|
@@ -85,7 +85,7 @@ namespace Orchard.Core.Settings.Topology {
|
||||
});
|
||||
}
|
||||
|
||||
_eventBus.Notify(
|
||||
_eventBus.Notify_Obsolete(
|
||||
"ShellDescriptor_Changed",
|
||||
null);
|
||||
}
|
||||
|
@@ -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() {
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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(
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user