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); }