IocHandlerFactory.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using Abp.Dependency;
  3. using Abp.Events.Bus.Handlers;
  4. namespace Abp.Events.Bus.Factories
  5. {
  6. /// <summary>
  7. /// This <see cref="IEventHandlerFactory"/> implementation is used to get/release
  8. /// handlers using Ioc.
  9. /// </summary>
  10. public class IocHandlerFactory : IEventHandlerFactory
  11. {
  12. /// <summary>
  13. /// Type of the handler.
  14. /// </summary>
  15. public Type HandlerType { get; }
  16. private readonly IIocResolver _iocResolver;
  17. /// <summary>
  18. /// Creates a new instance of <see cref="IocHandlerFactory"/> class.
  19. /// </summary>
  20. /// <param name="iocResolver"></param>
  21. /// <param name="handlerType">Type of the handler</param>
  22. public IocHandlerFactory(IIocResolver iocResolver, Type handlerType)
  23. {
  24. _iocResolver = iocResolver;
  25. HandlerType = handlerType;
  26. }
  27. /// <summary>
  28. /// Resolves handler object from Ioc container.
  29. /// </summary>
  30. /// <returns>Resolved handler object</returns>
  31. public IEventHandler GetHandler()
  32. {
  33. return (IEventHandler)_iocResolver.Resolve(HandlerType);
  34. }
  35. public Type GetHandlerType()
  36. {
  37. return HandlerType;
  38. }
  39. /// <summary>
  40. /// Releases handler object using Ioc container.
  41. /// </summary>
  42. /// <param name="handler">Handler to be released</param>
  43. public void ReleaseHandler(IEventHandler handler)
  44. {
  45. _iocResolver.Release(handler);
  46. }
  47. }
  48. }