PageRenderTime 47ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/src/NUnit/util/Services/ServiceManager.cs

#
C# | 103 lines | 79 code | 13 blank | 11 comment | 6 complexity | 1b27276e7f594b49f9245c323aeedfce MD5 | raw file
Possible License(s): GPL-2.0
  1. // ****************************************************************
  2. // Copyright 2007, Charlie Poole
  3. // This is free software licensed under the NUnit license. You may
  4. // obtain a copy of the license at http://nunit.org
  5. // ****************************************************************
  6. using System;
  7. using System.Collections;
  8. using NUnit.Core;
  9. namespace NUnit.Util
  10. {
  11. /// <summary>
  12. /// Summary description for ServiceManger.
  13. /// </summary>
  14. public class ServiceManager
  15. {
  16. private ArrayList services = new ArrayList();
  17. private Hashtable serviceIndex = new Hashtable();
  18. private static ServiceManager defaultServiceManager = new ServiceManager();
  19. static Logger log = InternalTrace.GetLogger(typeof(ServiceManager));
  20. public static ServiceManager Services
  21. {
  22. get { return defaultServiceManager; }
  23. }
  24. public void AddService( IService service )
  25. {
  26. services.Add( service );
  27. log.Debug( "Added " + service.GetType().Name );
  28. }
  29. public IService GetService( Type serviceType )
  30. {
  31. IService theService = (IService)serviceIndex[serviceType];
  32. if ( theService == null )
  33. foreach( IService service in services )
  34. {
  35. // TODO: Does this work on Mono?
  36. if( serviceType.IsInstanceOfType( service ) )
  37. {
  38. serviceIndex[serviceType] = service;
  39. theService = service;
  40. break;
  41. }
  42. }
  43. if ( theService == null )
  44. log.Error( string.Format( "Requested service {0} was not found", serviceType.FullName ) );
  45. else
  46. log.Debug( string.Format( "Request for service {0} satisfied by {1}", serviceType.Name, theService.GetType().Name ) );
  47. return theService;
  48. }
  49. public void InitializeServices()
  50. {
  51. foreach( IService service in services )
  52. {
  53. log.Info( "Initializing " + service.GetType().Name );
  54. try
  55. {
  56. service.InitializeService();
  57. }
  58. catch (Exception ex)
  59. {
  60. log.Error("Failed to initialize service", ex);
  61. }
  62. }
  63. }
  64. public void StopAllServices()
  65. {
  66. // Stop services in reverse of initialization order
  67. // TODO: Deal with dependencies explicitly
  68. int index = services.Count;
  69. while (--index >= 0)
  70. {
  71. IService service = services[index] as IService;
  72. log.Info( "Stopping " + service.GetType().Name );
  73. try
  74. {
  75. service.UnloadService();
  76. }
  77. catch (Exception ex)
  78. {
  79. log.Error("Failure stopping service", ex);
  80. }
  81. }
  82. }
  83. public void ClearServices()
  84. {
  85. log.Info("Clearing Service list");
  86. services.Clear();
  87. }
  88. private ServiceManager() { }
  89. }
  90. }