mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
#19476: Event bus refactoring. Interface name matching should be case-sensitive.
Work Item: 19476 --HG-- branch : 1.x
This commit is contained in:
@@ -22,13 +22,13 @@ namespace Orchard.Tests.Events {
|
||||
builder.RegisterType<StubExceptionPolicy>().As<IExceptionPolicy>();
|
||||
|
||||
builder.RegisterType<StubEventHandler2>()
|
||||
.Named(typeof(ITestEventHandler).Name.ToLowerInvariant(), typeof(IEventHandler))
|
||||
.Named(typeof(IEventHandler).Name.ToLowerInvariant(), typeof(IEventHandler))
|
||||
.WithMetadata("Interfaces", typeof(StubEventHandler2).GetInterfaces().ToLookup(i => i.Name, StringComparer.OrdinalIgnoreCase));
|
||||
.Named(typeof(ITestEventHandler).Name, typeof(IEventHandler))
|
||||
.Named(typeof(IEventHandler).Name, typeof(IEventHandler))
|
||||
.WithMetadata("Interfaces", typeof(StubEventHandler2).GetInterfaces().ToLookup(i => i.Name));
|
||||
builder.RegisterInstance(_eventHandler)
|
||||
.Named(typeof(ITestEventHandler).Name.ToLowerInvariant(), typeof(IEventHandler))
|
||||
.Named(typeof(IEventHandler).Name.ToLowerInvariant(), typeof(IEventHandler))
|
||||
.WithMetadata("Interfaces", typeof(StubEventHandler).GetInterfaces().ToLookup(i => i.Name, StringComparer.OrdinalIgnoreCase));
|
||||
.Named(typeof(ITestEventHandler).Name, typeof(IEventHandler))
|
||||
.Named(typeof(IEventHandler).Name, typeof(IEventHandler))
|
||||
.WithMetadata("Interfaces", typeof(StubEventHandler).GetInterfaces().ToLookup(i => i.Name));
|
||||
|
||||
_container = builder.Build();
|
||||
_eventBus = _container.Resolve<IEventBus>();
|
||||
|
@@ -83,11 +83,11 @@ namespace Orchard.Environment.ShellBuilders {
|
||||
if (typeof(IEventHandler).IsAssignableFrom(item.Type)) {
|
||||
var interfaces = item.Type.GetInterfaces();
|
||||
foreach (var interfaceType in interfaces) {
|
||||
// Register named instance for each interface, for efficient filtering withing event bus
|
||||
registration = registration.Named(interfaceType.Name.ToLowerInvariant(), typeof (IEventHandler));
|
||||
// Register named instance for each interface, for efficient filtering inside event bus
|
||||
registration = registration.Named(interfaceType.Name, typeof (IEventHandler));
|
||||
}
|
||||
// Keep interfaces in metadata for performance
|
||||
registration = registration.WithMetadata("Interfaces", interfaces.ToLookup(i => i.Name, StringComparer.OrdinalIgnoreCase));
|
||||
registration = registration.WithMetadata("Interfaces", interfaces.ToLookup(i => i.Name));
|
||||
}
|
||||
|
||||
foreach (var parameter in item.Parameters) {
|
||||
|
@@ -37,7 +37,7 @@ namespace Orchard.Events {
|
||||
string interfaceName = parameters[0];
|
||||
string methodName = parameters[1];
|
||||
|
||||
var eventHandlers = _eventHandlers[interfaceName.ToLowerInvariant()];
|
||||
var eventHandlers = _eventHandlers[interfaceName];
|
||||
foreach (var eventHandler in eventHandlers) {
|
||||
IEnumerable returnValue;
|
||||
if (TryNotifyHandler(eventHandler, messageName, interfaceName, methodName, eventData, out returnValue)) {
|
||||
@@ -74,7 +74,7 @@ namespace Orchard.Events {
|
||||
}
|
||||
|
||||
private static bool TryInvokeMethod(IEventHandler eventHandler, Type interfaceType, string methodName, IDictionary<string, object> arguments, out IEnumerable returnValue) {
|
||||
var key = String.Concat(eventHandler.GetType().FullName + "_" + interfaceType.Name, "_", methodName, "_", String.Join("_", arguments.Keys));
|
||||
var key = eventHandler.GetType().FullName + "_" + interfaceType.Name + "_" + methodName + "_" + String.Join("_", arguments.Keys);
|
||||
var cachedDelegate = _delegateCache.GetOrAdd(key, k => {
|
||||
var method = GetMatchingMethod(eventHandler, interfaceType, methodName, arguments);
|
||||
return method != null
|
||||
|
Reference in New Issue
Block a user