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 string LastMessageName { get; set; }
|
||||||
public IDictionary<string, string> LastEventData { 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;
|
LastMessageName = messageName;
|
||||||
LastEventData = eventData;
|
LastEventData = eventData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Notify(string messageName, Dictionary<string, object> eventData) {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IEnumerable<Type> DatabaseTypes {
|
protected override IEnumerable<Type> DatabaseTypes {
|
||||||
|
@@ -23,7 +23,7 @@ namespace Orchard.Tests.Events {
|
|||||||
[Test]
|
[Test]
|
||||||
public void EventsAreCorrectlyDispatchedToHandlers() {
|
public void EventsAreCorrectlyDispatchedToHandlers() {
|
||||||
Assert.That(_eventBusHandler.LastMessageName, Is.Null);
|
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"));
|
Assert.That(_eventBusHandler.LastMessageName, Is.EqualTo("Notification"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -85,7 +85,7 @@ namespace Orchard.Core.Settings.Topology {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_eventBus.Notify(
|
_eventBus.Notify_Obsolete(
|
||||||
"ShellDescriptor_Changed",
|
"ShellDescriptor_Changed",
|
||||||
null);
|
null);
|
||||||
}
|
}
|
||||||
|
@@ -36,7 +36,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));
|
||||||
|
|
||||||
_eventBus.Notify("ShellSettings_Saved", null);
|
_eventBus.Notify_Obsolete("ShellSettings_Saved", null);
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerable<ShellSettings> LoadSettings() {
|
IEnumerable<ShellSettings> LoadSettings() {
|
||||||
|
@@ -12,6 +12,7 @@ using Autofac.Integration.Web.Mvc;
|
|||||||
using Orchard.Environment.AutofacUtil.DynamicProxy2;
|
using Orchard.Environment.AutofacUtil.DynamicProxy2;
|
||||||
using Orchard.Environment.Configuration;
|
using Orchard.Environment.Configuration;
|
||||||
using Orchard.Environment.Topology.Models;
|
using Orchard.Environment.Topology.Models;
|
||||||
|
using Orchard.Events;
|
||||||
|
|
||||||
namespace Orchard.Environment.ShellBuilders {
|
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) {
|
foreach (var parameter in item.Parameters) {
|
||||||
registration = registration
|
registration = registration
|
||||||
.WithParameter(parameter.Name, parameter.Value)
|
.WithParameter(parameter.Name, parameter.Value)
|
||||||
|
@@ -5,9 +5,11 @@ using Orchard.Logging;
|
|||||||
namespace Orchard.Events {
|
namespace Orchard.Events {
|
||||||
public class DefaultOrchardEventBus : IEventBus {
|
public class DefaultOrchardEventBus : IEventBus {
|
||||||
private readonly Func<IEnumerable<IEventBusHandler>> _handlers;
|
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;
|
_handlers = handlers;
|
||||||
|
_eventHandlers = eventHandlers;
|
||||||
Logger = NullLogger.Instance;
|
Logger = NullLogger.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -15,10 +17,13 @@ namespace Orchard.Events {
|
|||||||
|
|
||||||
#region Implementation of IEventBus
|
#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);
|
_handlers().Invoke(handler => handler.Process(messageName, eventData), Logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Notify(string messageName, Dictionary<string, object> eventData) {
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,9 +15,9 @@ namespace Orchard.Events {
|
|||||||
|
|
||||||
var data = invocation.Method.GetParameters()
|
var data = invocation.Method.GetParameters()
|
||||||
.Select((parameter, index) => new { parameter.Name, Value = invocation.Arguments[index] })
|
.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;
|
yield break;
|
||||||
|
|
||||||
var serviceType = serviceWithType.ServiceType;
|
var serviceType = serviceWithType.ServiceType;
|
||||||
if (!serviceType.IsInterface || !typeof(IEventHandler).IsAssignableFrom(serviceType))
|
if (!serviceType.IsInterface || !typeof(IEventHandler).IsAssignableFrom(serviceType) || serviceType == typeof(IEventHandler))
|
||||||
yield break;
|
yield break;
|
||||||
|
|
||||||
var interfaceProxyType = _proxyBuilder.CreateInterfaceProxyTypeWithoutTarget(
|
var interfaceProxyType = _proxyBuilder.CreateInterfaceProxyTypeWithoutTarget(
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Orchard.Events {
|
namespace Orchard.Events {
|
||||||
public interface IEventBus : IDependency {
|
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