|
|
|
@ -1,4 +1,6 @@ |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
|
|
|
|
namespace Volo.Abp.EventBus |
|
|
|
{ |
|
|
|
@ -7,22 +9,62 @@ namespace Volo.Abp.EventBus |
|
|
|
/// by a transient instance object.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// This class always creates a new transient instance of handler.
|
|
|
|
/// This class always creates a new transient instance of the handler type.
|
|
|
|
/// </remarks>
|
|
|
|
public class TransientEventHandlerFactory<THandler> : IEventHandlerFactory |
|
|
|
public class TransientEventHandlerFactory<THandler> : TransientEventHandlerFactory, IEventHandlerFactory |
|
|
|
where THandler : IEventHandler, new() |
|
|
|
{ |
|
|
|
public TransientEventHandlerFactory() |
|
|
|
: base(typeof(THandler)) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
protected override IEventHandler CreateHandler() |
|
|
|
{ |
|
|
|
return new THandler(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// This <see cref="IEventHandlerFactory"/> implementation is used to handle events
|
|
|
|
/// by a transient instance object.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// This class always creates a new transient instance of the handler type.
|
|
|
|
/// </remarks>
|
|
|
|
public class TransientEventHandlerFactory : IEventHandlerFactory |
|
|
|
{ |
|
|
|
public Type HandlerType { get; } |
|
|
|
|
|
|
|
public TransientEventHandlerFactory(Type handlerType) |
|
|
|
{ |
|
|
|
HandlerType = handlerType; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Creates a new instance of the handler object.
|
|
|
|
/// </summary>
|
|
|
|
/// <returns>The handler object</returns>
|
|
|
|
public IEventHandlerDisposeWrapper GetHandler() |
|
|
|
public virtual IEventHandlerDisposeWrapper GetHandler() |
|
|
|
{ |
|
|
|
var handler = new THandler(); |
|
|
|
var handler = CreateHandler(); |
|
|
|
return new EventHandlerDisposeWrapper( |
|
|
|
handler, |
|
|
|
() => (handler as IDisposable)?.Dispose() |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
public bool IsInFactories(List<IEventHandlerFactory> handlerFactories) |
|
|
|
{ |
|
|
|
return handlerFactories |
|
|
|
.OfType<TransientEventHandlerFactory>() |
|
|
|
.Any(f => f.HandlerType == HandlerType); |
|
|
|
} |
|
|
|
|
|
|
|
protected virtual IEventHandler CreateHandler() |
|
|
|
{ |
|
|
|
return (IEventHandler) Activator.CreateInstance(HandlerType); |
|
|
|
} |
|
|
|
} |
|
|
|
} |