/// <summary> /// Creates message (sequential) handler instance depend on parameter value (could be get /// from config). /// </summary> /// <param name="messageHandlerElement">Element from XML config.</param> /// <returns>Fully initialized instance of message handler class.</returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="messageHandlerElement" /> isn't specified in XML config. /// </exception> /// <exception cref="ArgumentNullException"> /// <paramref name="messageHandlerElement" /> or its attribute with handler name is /// <c>null</c>. /// </exception> public Communication.IMessageHandler CreateMessageHandler(XElement messageHandlerElement) { messageHandlerElement.ThrowIfNull(nameof(messageHandlerElement)); var handlerElement = messageHandlerElement.Attribute(_messageHandlerTypeParameterName); handlerElement.ThrowIfNull(nameof(handlerElement)); switch (handlerElement.Value) { case _consoleMessageHandlerParameterName: { var messageHandlerParametersElement = XDocumentParser.FindSubelement( messageHandlerElement, _setUnicodeParameterName ); var setUnicode = XDocumentParser.GetElementValue <bool>( messageHandlerParametersElement ); return(new Communication.ConsoleMessageHandler(setUnicode)); } default: { var ex = new ArgumentOutOfRangeException( nameof(messageHandlerElement), messageHandlerElement, "Couldn't recognize message handler type specified in XML config." ); _logger.Error(ex, "Passed incorrect data to method: " + $"{handlerElement.Value}"); throw ex; } } }
/// <summary> /// Creates message (sequential) handler instance depend on parameter value (could be get /// from config). /// </summary> /// <param name="messageHandlerElement">Element from XML config.</param> /// <returns>Fully initialized instance of message handler class.</returns> /// <exception cref="ArgumentOutOfRangeException"> /// <paramref name="messageHandlerElement" /> isn't specified in XML config. /// </exception> /// <exception cref="ArgumentNullException"> /// <paramref name="messageHandlerElement" /> or its attribute with handler name is /// <c>null</c>. /// </exception> public Communication.IMessageHandler CreateMessageHandler(XElement messageHandlerElement) { messageHandlerElement.ThrowIfNull(nameof(messageHandlerElement)); _logger.Info("Creating message handler."); var handlerElement = messageHandlerElement.Attribute(_messageHandlerTypeParameterName); handlerElement.ThrowIfNull(nameof(handlerElement)); switch (handlerElement.Value) { case _consoleMessageHandlerParameterName: { XElement?messageHandlerParametersElement = XDocumentParser.FindSubelement( messageHandlerElement, _setUnicodeParameterName ); if (messageHandlerParametersElement is null) { throw new ArgumentException( "Invalid structure of XML document: cannot find message handler " + "parameters block.", nameof(messageHandlerElement) ); } var setUnicode = XDocumentParser.GetElementValue <bool>( messageHandlerParametersElement ); return(new Communication.ConsoleMessageHandler(setUnicode)); } default: { throw new ArgumentOutOfRangeException( nameof(messageHandlerElement), messageHandlerElement, "Couldn't recognize message handler type specified in XML config." ); } } }