using System;
using Abp.Dependency;
using Abp.Events.Bus.Handlers;
namespace Abp.Events.Bus.Factories
{
///
/// This implementation is used to get/release
/// handlers using Ioc.
///
public class IocHandlerFactory : IEventHandlerFactory
{
///
/// Type of the handler.
///
public Type HandlerType { get; }
private readonly IIocResolver _iocResolver;
///
/// Creates a new instance of class.
///
///
/// Type of the handler
public IocHandlerFactory(IIocResolver iocResolver, Type handlerType)
{
_iocResolver = iocResolver;
HandlerType = handlerType;
}
///
/// Resolves handler object from Ioc container.
///
/// Resolved handler object
public IEventHandler GetHandler()
{
return (IEventHandler)_iocResolver.Resolve(HandlerType);
}
public Type GetHandlerType()
{
return HandlerType;
}
///
/// Releases handler object using Ioc container.
///
/// Handler to be released
public void ReleaseHandler(IEventHandler handler)
{
_iocResolver.Release(handler);
}
}
}