Removing Meta<> dependencies for EventBus

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2013-02-23 14:11:21 -08:00
parent 0c711d4f4b
commit d3177f1530
2 changed files with 9 additions and 15 deletions

View File

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

View File

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