Skip to content
Put your apps on the Topshelf, with the power of SimpleInjector & Quartz.NET!
Branch: dev
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
ReleaseScripts testing release Jan 2, 2016
Source bump dependencies May 25, 2017
Tests upgrading packages May 25, 2017
LICENSE Update May 25, 2017
appveyor.yml update to build master May 25, 2017


Build status Build Status NuGet Version NuGet Downloads Coverage Status

Put your apps on the Topshelf, with the power of SimpleInjector! Topshelf.SimpleInjector provides extensions to construct your Topshelf service class from the SimpleInjector IoC container.

Project Status Stories in Ready

Throughput Graph


You can find the package on NuGet Gallery.

To install Topshelf.SimpleInjector, run the following command in the Package Manager Console: Install-Package Topshelf.SimpleInjector

Quick Start

You can also find a Quick Start package on NuGet Gallery. This will quickly get you up and running with your Topshelf Windows Service and SimpleInjector IoC Framework, when following these steps:

    1. Create a new Console Application in Visual Studio
    1. Install Topshelf.SimpleInjector.QuickStart, running the following command in the Package Manager Console: Install-Package Topshelf.SimpleInjector.QuickStart
    1. When your asked to overwrite Program.cs click Yes
    1. Click start and you will have a running service
    1. Change the service name and implement your logic :-)

Example Usage

The sample code below, is basically the same as the code you will get in the Quick Start package.

using System;
using SimpleInjector;

namespace Topshelf.SimpleInjector.Sample
    class Program
        private static readonly Container _container = new Container();
        static void Main(string[] args)
            //Register services
            _container.Register<ISampleDependency, SampleDependency>();
            _container.Register<ISampleDependency2, SampleDependency2>();
            //This does not need to be explicitly registered

            //Check container for errors

            HostFactory.Run(config =>
                // Pass it to Topshelf

                config.Service<SampleService>(s =>
                    // Let Topshelf use it
                    s.WhenStarted((service, control) => service.Start());
                    s.WhenStopped((service, control) => service.Stop());

        public class SampleService
            private readonly ISampleDependency _sample;
            private readonly ISampleDependency2 _sample2;

            public SampleService(ISampleDependency sample, ISampleDependency2 sample2)
                _sample = sample;
                _sample2 = sample2;

            public bool Start()
                Console.WriteLine("Sample Service Started.");
                Console.WriteLine("Sample Dependency: {0}", _sample);
                Console.WriteLine("Sample Dependency2: {0}", _sample2);
                return _sample != null && _sample2 != null;

            public bool Stop()
                return _sample != null && _sample2 != null;

        public interface ISampleDependency

        public class SampleDependency : ISampleDependency

        public interface ISampleDependency2

        public class SampleDependency2 : ISampleDependency2


Copyright & License

Copyright 2014-2017 tynor88

Licensed under the MIT License

You can’t perform that action at this time.