private void ConnectEBC(IEBCBase outputEBC, IEBCBase inputEBC)
        {
            outputEBC.Out_SendMessage += (IEBCMessage ebcMessage) => this.EBCInputData[inputEBC] = ebcMessage;

            if (!this.EBCOutputConnections.ContainsKey(outputEBC))
            {
                Dictionary<IEBCBase, Action<IEBCMessage>> inputEBCsAndMessages = new Dictionary<IEBCBase, Action<IEBCMessage>>();
                inputEBCsAndMessages.Add(inputEBC, (IEBCMessage ebcMessage) => inputEBC.In_ReceiveMessage(ebcMessage));

                this.EBCOutputConnections.Add(outputEBC, inputEBCsAndMessages);
            }
            else
            {
                // If there's already a Connection between those Shapes, cancel the new one.
                if (this.EBCOutputConnections[outputEBC].ContainsKey(inputEBC))
                    throw new ShapeConnectionException("Eine entsprechende Verbindung ist schon vorhanden und kann nicht erneut angelegt werden!");

                this.EBCOutputConnections[outputEBC].Add(inputEBC, (IEBCMessage ebcMessage) => inputEBC.In_ReceiveMessage(ebcMessage));
            }

            try
            {
                // Check for circular connections.
                this.DetectCircularConnections(outputEBC, outputEBC);

                if (!this.EBCInputConnections.ContainsKey(inputEBC))
                {
                    List<IEBCBase> outputEBCs = new List<IEBCBase>();
                    outputEBCs.Add(outputEBC);

                    this.EBCInputConnections.Add(inputEBC, outputEBCs);
                }
                else
                {
                    this.EBCInputConnections[inputEBC].Add(outputEBC);
                }

                outputEBC.Out_SendMessage += this.EBCOutputConnections[outputEBC][inputEBC];
            }
            catch (CircularConnectionException circularConnectionException)
            {
                this.EBCOutputConnections.Remove(outputEBC);

                throw circularConnectionException;
            }
        }
 private void StartEBCWork(IEBCBase firstEBC)
 {
     if (this.EBCInputData.ContainsKey(firstEBC))
         firstEBC.In_ReceiveMessage(this.EBCInputData[firstEBC]);
     else
         firstEBC.In_ReceiveMessage(null);
 }