I would think you would want to create a sub service model where one could start any number of sub services from the main windows service.
public interface ISubService
{
void Initialize( XmlElement xmlSection );
bool Start( );
void RequestStop( );
void Stop( TimeSpan timeout );
}
Then maybe a base Threaded Service class..
public abstract class ThreadedService : ISubService
{
private Thread m_thread;
private ThreadedService( )
{
m_thread = new Thread( new ThreadStart( StartThread ) );
}
// implement the interface
}
Configure your services through the app.config and an IConfigurationSectionHandler...
public class ServiceConfigurationHandler : IConfigurationSectionHandler
{
public ServiceConfigurationHandler() { }
public object Create(object parent, object configContext, XmlNode section)
{
return new ServiceConfiguration((XmlElement)section);
}
}
Something to handle the config sections...
public class ServiceConfiguration
{
public static readonly ServiceConfiguration Current = (ServiceConfiguration)ConfigurationManager.GetSection("me/services");
private List<ISubService> m_services;
private string m_serviceName;
internal ServiceConfiguration(XmlElement xmlSection)
{
// loop through the config and initialize the services
// service = createinstance(type)..kind of deal
// m_services.Add( service );
}
public void Start( )
{
foreach( ISubService service in m_services ) { service.Start( ); }
}
public void Stop( ) { ... }
}
then you simply create however many threadedservice based classes you need for your sub services, and throw them all into the app.config...something like..
<me>
<services>
<service type="my.library.service1,my.library" />
<service type="my.library.service2,my.library" />
</services>
</me>
and lastly, in your actual service code, just have to do ServiceConfiguration.Current.Start( ) on the start, and Service.Configuration.Current.Stop( ) in the exit.
Hope that helps!