mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Removing Meta<> dependencies for EventBus
--HG-- branch : 1.x
This commit is contained in:
@@ -85,14 +85,11 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
foreach (var interfaceType in interfaces) {
|
||||
|
||||
// register named instance for each interface, for efficient filtering inside event bus
|
||||
// IEventHandler subclasses onnly
|
||||
if (interfaceType.IsSubclassOf(typeof(IEventHandler)) && interfaceType != typeof(IEventHandler)) {
|
||||
registration = registration.Named(interfaceType.Name, typeof(IEventHandler));
|
||||
// IEventHandler derived classes only
|
||||
if (interfaceType.GetInterface(typeof (IEventHandler).Name) != null) {
|
||||
registration = registration.Named(interfaceType.Name, typeof (IEventHandler));
|
||||
}
|
||||
}
|
||||
|
||||
// keep mapping between interface name and actual type
|
||||
registration = registration.WithMetadata("Interfaces", interfaces.ToDictionary(i => i.Name));
|
||||
}
|
||||
|
||||
foreach (var parameter in item.Parameters) {
|
||||
|
@@ -5,17 +5,16 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Autofac.Features.Indexed;
|
||||
using Autofac.Features.Metadata;
|
||||
using Orchard.Exceptions;
|
||||
using Orchard.Localization;
|
||||
|
||||
namespace Orchard.Events {
|
||||
public class DefaultOrchardEventBus : IEventBus {
|
||||
private readonly IIndex<string, IEnumerable<Meta<IEventHandler>>> _eventHandlers;
|
||||
private readonly IIndex<string, IEnumerable<IEventHandler>> _eventHandlers;
|
||||
private readonly IExceptionPolicy _exceptionPolicy;
|
||||
private static readonly ConcurrentDictionary<string, Tuple<ParameterInfo[], Func<IEventHandler, object[], object>>> _delegateCache = new ConcurrentDictionary<string, Tuple<ParameterInfo[], Func<IEventHandler, object[], object>>>();
|
||||
|
||||
public DefaultOrchardEventBus(IIndex<string, IEnumerable<Meta<IEventHandler>>> eventHandlers, IExceptionPolicy exceptionPolicy) {
|
||||
public DefaultOrchardEventBus(IIndex<string, IEnumerable<IEventHandler>> eventHandlers, IExceptionPolicy exceptionPolicy) {
|
||||
_eventHandlers = eventHandlers;
|
||||
_exceptionPolicy = exceptionPolicy;
|
||||
T = NullLocalizer.Instance;
|
||||
@@ -49,7 +48,7 @@ namespace Orchard.Events {
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryNotifyHandler(Meta<IEventHandler> eventHandler, string messageName, string interfaceName, string methodName, IDictionary<string, object> eventData, out IEnumerable returnValue) {
|
||||
private bool TryNotifyHandler(IEventHandler eventHandler, string messageName, string interfaceName, string methodName, IDictionary<string, object> eventData, out IEnumerable returnValue) {
|
||||
try {
|
||||
return TryInvoke(eventHandler, messageName, interfaceName, methodName, eventData, out returnValue);
|
||||
}
|
||||
@@ -63,11 +62,9 @@ namespace Orchard.Events {
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TryInvoke(Meta<IEventHandler> eventHandler, string messageName, string interfaceName, string methodName, IDictionary<string, object> arguments, out IEnumerable returnValue) {
|
||||
var interfaces = (IDictionary<string, Type>)eventHandler.Metadata["Interfaces"];
|
||||
var matchingInterface = interfaces.Count == 1 ? interfaces.First().Value : interfaces[interfaceName];
|
||||
|
||||
return TryInvokeMethod(eventHandler.Value, matchingInterface, messageName, interfaceName, methodName, arguments, out returnValue);
|
||||
private static bool TryInvoke(IEventHandler eventHandler, string messageName, string interfaceName, string methodName, IDictionary<string, object> arguments, out IEnumerable returnValue) {
|
||||
var matchingInterface = eventHandler.GetType().GetInterface(interfaceName);
|
||||
return TryInvokeMethod(eventHandler, matchingInterface, messageName, interfaceName, methodName, arguments, out returnValue);
|
||||
}
|
||||
|
||||
private static bool TryInvokeMethod(IEventHandler eventHandler, Type interfaceType, string messageName, string interfaceName, string methodName, IDictionary<string, object> arguments, out IEnumerable returnValue) {
|
||||
|
Reference in New Issue
Block a user