1 // ****************************************************************
\r
2 // Copyright 2007, Charlie Poole
\r
3 // This is free software licensed under the NUnit license. You may
\r
4 // obtain a copy of the license at http://nunit.org/?p=license&r=2.4
\r
5 // ****************************************************************
\r
8 using System.Collections;
\r
11 namespace NUnit.Util
\r
14 /// Summary description for ServiceManger.
\r
16 public class ServiceManager
\r
18 private ArrayList services = new ArrayList();
\r
19 private Hashtable serviceIndex = new Hashtable();
\r
21 private static ServiceManager defaultServiceManager = new ServiceManager();
\r
23 public static ServiceManager Services
\r
25 get { return defaultServiceManager; }
\r
28 public void AddService( IService service )
\r
30 services.Add( service );
\r
31 NTrace.Debug( "Added " + service.GetType().Name );
\r
34 public IService GetService( Type serviceType )
\r
36 IService theService = (IService)serviceIndex[serviceType];
\r
37 if ( theService == null )
\r
38 foreach( IService service in services )
\r
40 // TODO: Does this work on Mono?
\r
41 if( serviceType.IsInstanceOfType( service ) )
\r
43 serviceIndex[serviceType] = service;
\r
44 theService = service;
\r
49 if ( theService == null )
\r
50 NTrace.Error( string.Format( "Requested service {0} was not found", serviceType.FullName ) );
\r
52 NTrace.Info( string.Format( "Request for service {0} satisfied by {1}", serviceType.Name, theService.GetType().Name ) );
\r
57 public void InitializeServices()
\r
59 foreach( IService service in services )
\r
61 NTrace.Info( "Initializing " + service.GetType().Name );
\r
62 service.InitializeService();
\r
66 public void StopAllServices()
\r
68 // Stop services in reverse of initialization order
\r
69 // TODO: Deal with dependencies explicitly
\r
70 int index = services.Count;
\r
71 while( --index >= 0 )
\r
72 ((IService)services[index]).UnloadService();
\r
75 public void ClearServices()
\r
80 private ServiceManager() { }
\r