From d3177f15304482666cbbcbf3bdc68e54fcbc11e6 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Sat, 23 Feb 2013 14:11:21 -0800 Subject: [PATCH] Removing Meta<> dependencies for EventBus --HG-- branch : 1.x --- .../ShellBuilders/ShellContainerFactory.cs | 9 +++------ src/Orchard/Events/DefaultOrchardEventBus.cs | 15 ++++++--------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs b/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs index 233ba3ca5..8b36f8103 100644 --- a/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs +++ b/src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs @@ -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) { diff --git a/src/Orchard/Events/DefaultOrchardEventBus.cs b/src/Orchard/Events/DefaultOrchardEventBus.cs index f34af6b15..01866e437 100644 --- a/src/Orchard/Events/DefaultOrchardEventBus.cs +++ b/src/Orchard/Events/DefaultOrchardEventBus.cs @@ -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>> _eventHandlers; + private readonly IIndex> _eventHandlers; private readonly IExceptionPolicy _exceptionPolicy; private static readonly ConcurrentDictionary>> _delegateCache = new ConcurrentDictionary>>(); - public DefaultOrchardEventBus(IIndex>> eventHandlers, IExceptionPolicy exceptionPolicy) { + public DefaultOrchardEventBus(IIndex> eventHandlers, IExceptionPolicy exceptionPolicy) { _eventHandlers = eventHandlers; _exceptionPolicy = exceptionPolicy; T = NullLocalizer.Instance; @@ -49,7 +48,7 @@ namespace Orchard.Events { } } - private bool TryNotifyHandler(Meta eventHandler, string messageName, string interfaceName, string methodName, IDictionary eventData, out IEnumerable returnValue) { + private bool TryNotifyHandler(IEventHandler eventHandler, string messageName, string interfaceName, string methodName, IDictionary 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 eventHandler, string messageName, string interfaceName, string methodName, IDictionary arguments, out IEnumerable returnValue) { - var interfaces = (IDictionary)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 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 arguments, out IEnumerable returnValue) {