public DoorService(IOutboundEventBus outboundEventBus, SwitchDriver doorReedSwitch)
        {
            _outboundEventBus = outboundEventBus;
            _doorReedSwitch   = doorReedSwitch;

            OnDoorOpened = (sender, e) =>
            {
                _outboundEventBus.Send(new DoorOpenedEvent());
            };
            OnDoorClosed = (sender, e) =>
            {
                _outboundEventBus.Send(new DoorClosedEvent());
            };
        }
        public WindowsManagingService(LinearActuatorDriver window1Actuator,
                                      LinearActuatorDriver window2Actuator,
                                      SwitchDriver window1ReedSwitch,
                                      SwitchDriver window2ReedSwitch,
                                      SwitchDriver window1ControlSwitch,
                                      SwitchDriver window2ControlSwitch,
                                      IOutboundEventBus outboundEventBus)
        {
            _windowActuators       = new[] { window1Actuator, window2Actuator };
            _windowReedSwitches    = new[] { window1ReedSwitch, window2ReedSwitch };
            _windowControlSwitches = new[] { window1ControlSwitch, window2ControlSwitch };
            _windowStates          = new[] { window1ReedSwitch.GetState(), window2ReedSwitch.GetState() };
            _outboundEventBus      = outboundEventBus;

            OnWindow1Opened = (sender, e) =>
            {
                _windowStates[0] = SwitchState.Opened;
                _outboundEventBus.Send(new WindowOpenedEvent(0));
            };
            OnWindow1Closed = (sender, e) =>
            {
                _windowStates[0] = SwitchState.Closed;
                _windowActuators[0].StopMoving();
                _outboundEventBus.Send(new WindowClosedEvent(0));
            };

            OnWindow2Opened = (sender, e) =>
            {
                _windowStates[1] = SwitchState.Opened;
                _outboundEventBus.Send(new WindowOpenedEvent(1));
            };

            OnWindow2Closed = (sender, e) =>
            {
                _windowStates[1] = SwitchState.Closed;
                _windowActuators[1].StopMoving();
                _outboundEventBus.Send(new WindowClosedEvent(1));
            };

            //Control switches
            OnWindow1ControlSwitchOpened = (sender, e) => { OpenWindowAsync(0); };
            OnWindow1ControlSwitchClosed = (sender, e) =>
            {
                if (_windowStates[0] == SwitchState.Closed)
                {
                    return;
                }

                CloseWindowAsync(0);
            };

            OnWindow2ControlSwitchOpened = (sender, e) => { OpenWindowAsync(1); };

            OnWindow2ControlSwitchClosed = (sender, e) =>
            {
                if (_windowStates[1] == SwitchState.Closed)
                {
                    return;
                }

                CloseWindowAsync(1);
            };
        }