mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-12-02 19:44:02 +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) {
|
foreach (var interfaceType in interfaces) {
|
||||||
|
|
||||||
// register named instance for each interface, for efficient filtering inside event bus
|
// register named instance for each interface, for efficient filtering inside event bus
|
||||||
// IEventHandler subclasses onnly
|
// IEventHandler derived classes only
|
||||||
if (interfaceType.IsSubclassOf(typeof(IEventHandler)) && interfaceType != typeof(IEventHandler)) {
|
if (interfaceType.GetInterface(typeof (IEventHandler).Name) != null) {
|
||||||
registration = registration.Named(interfaceType.Name, typeof(IEventHandler));
|
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) {
|
foreach (var parameter in item.Parameters) {
|
||||||
|
|||||||
@@ -5,17 +5,16 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Autofac.Features.Indexed;
|
using Autofac.Features.Indexed;
|
||||||
using Autofac.Features.Metadata;
|
|
||||||
using Orchard.Exceptions;
|
using Orchard.Exceptions;
|
||||||
using Orchard.Localization;
|
using Orchard.Localization;
|
||||||
|
|
||||||
namespace Orchard.Events {
|
namespace Orchard.Events {
|
||||||
public class DefaultOrchardEventBus : IEventBus {
|
public class DefaultOrchardEventBus : IEventBus {
|
||||||
private readonly IIndex<string, IEnumerable<Meta<IEventHandler>>> _eventHandlers;
|
private readonly IIndex<string, IEnumerable<IEventHandler>> _eventHandlers;
|
||||||
private readonly IExceptionPolicy _exceptionPolicy;
|
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>>>();
|
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;
|
_eventHandlers = eventHandlers;
|
||||||
_exceptionPolicy = exceptionPolicy;
|
_exceptionPolicy = exceptionPolicy;
|
||||||
T = NullLocalizer.Instance;
|
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 {
|
try {
|
||||||
return TryInvoke(eventHandler, messageName, interfaceName, methodName, eventData, out returnValue);
|
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) {
|
private static bool TryInvoke(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 = eventHandler.GetType().GetInterface(interfaceName);
|
||||||
var matchingInterface = interfaces.Count == 1 ? interfaces.First().Value : interfaces[interfaceName];
|
return TryInvokeMethod(eventHandler, matchingInterface, messageName, interfaceName, methodName, arguments, out returnValue);
|
||||||
|
|
||||||
return TryInvokeMethod(eventHandler.Value, 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) {
|
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