/// <summary>
        /// Initializes a new instance of the <see cref="SigningBindingElementChain"/> class.
        /// </summary>
        /// <param name="signers">
        /// The signing binding elements that may be used for some outgoing message,
        /// in preferred use order.
        /// </param>
        internal SigningBindingElementChain(ITamperProtectionChannelBindingElement[] signers)
        {
            if (signers == null) {
                throw new ArgumentNullException("signers");
            }
            if (signers.Length == 0) {
                throw new ArgumentException(MessagingStrings.SequenceContainsNoElements, "signers");
            }
            if (signers.Contains(null)) {
                throw new ArgumentException(MessagingStrings.SequenceContainsNullElement, "signers");
            }
            MessageProtections protection = signers[0].Protection;
            if (signers.Any(element => element.Protection != protection)) {
                throw new ArgumentException(OAuthStrings.SigningElementsMustShareSameProtection, "signers");
            }

            this.signers = signers;
        }