public HeatingControl(IApplicationLifetime appLifetime,
                              IMigrator migrator,
                              IBuildingProvider buildingProvider,
                              IControllerStateBuilder controllerStateBuilder,
                              ICommandExecutor <DisableAllOutputsCommand> disableAllOutputsCommandExecutor,
                              ITemperatureReadingLoop temperatureReadingLoop,
                              IScheduleDeterminationLoop scheduleDeterminationLoop,
                              IOutputStateProcessingLoop outputStateProcessingLoop,
                              IDigitalInputReadingLoop digitalInputReadingLoop)
        {
            migrator.Run();

            _appLifetime      = appLifetime;
            _buildingProvider = buildingProvider;
            _disableAllOutputsCommandExecutor = disableAllOutputsCommandExecutor;
            _temperatureReadingLoop           = temperatureReadingLoop;
            _scheduleDeterminationLoop        = scheduleDeterminationLoop;
            _outputStateProcessingLoop        = outputStateProcessingLoop;
            _digitalInputReadingLoop          = digitalInputReadingLoop;

            var model = _buildingProvider.ProvideDefault();

            State = controllerStateBuilder.Build(model);
        }