internal SmartOutputController(Guid id, string name, IOutputMediator <IntentOutput> outputMediator,
                                       IHardware executionControl,
                                       IOutputModuleConsumer <ISmartControllerModuleInstance> outputModuleConsumer)
        {
            if (outputMediator == null)
            {
                throw new ArgumentNullException("outputMediator");
            }
            if (executionControl == null)
            {
                throw new ArgumentNullException("executionControl");
            }
            if (outputModuleConsumer == null)
            {
                throw new ArgumentNullException("outputModuleConsumer");
            }

            Id                    = id;
            Name                  = name;
            _outputMediator       = outputMediator;
            _executionControl     = executionControl;
            _outputModuleConsumer = outputModuleConsumer;

            _outputCurrentStates = new IntentOutputStates();
            _dataPolicy          = new SmartControllerDataPolicy();
            _adapterFactory      = new IntentOutputDataFlowAdapterFactory();
        }
        internal SmartOutputController(Guid id, string name, IOutputMediator<IntentOutput> outputMediator,
            IHardware executionControl,
            IOutputModuleConsumer<ISmartControllerModuleInstance> outputModuleConsumer)
        {
            if (outputMediator == null) throw new ArgumentNullException("outputMediator");
            if (executionControl == null) throw new ArgumentNullException("executionControl");
            if (outputModuleConsumer == null) throw new ArgumentNullException("outputModuleConsumer");

            Id = id;
            Name = name;
            _outputMediator = outputMediator;
            _executionControl = executionControl;
            _outputModuleConsumer = outputModuleConsumer;

            _outputCurrentStates = new IntentOutputStates();
            _dataPolicy = new SmartControllerDataPolicy();
            _adapterFactory = new IntentOutputDataFlowAdapterFactory();
        }