Exemplo n.º 1
0
        /// <summary>
        /// Instantiates the given request message type.
        /// </summary>
        /// <param name="messageDescription">The message description.</param>
        /// <param name="request">The request that resulted in this response.</param>
        /// <returns>The instantiated message.  Never null.</returns>
        protected virtual IDirectResponseProtocolMessage InstantiateAsResponse(MessageDescription messageDescription, IDirectedProtocolMessage request)
        {
            Requires.NotNull(messageDescription, "messageDescription");
            Requires.NotNull(request, "request");

            Type            requestType = request.GetType();
            var             ctors       = this.FindMatchingResponseConstructors(messageDescription, requestType);
            ConstructorInfo ctor        = null;

            try {
                ctor = ctors.Single();
            } catch (InvalidOperationException) {
                if (ctors.Any())
                {
                    ErrorUtilities.ThrowInternal("More than one matching constructor for request type " + requestType.Name + " and response type " + messageDescription.MessageType.Name);
                }
                else
                {
                    ErrorUtilities.ThrowInternal("Unexpected request message type " + requestType.FullName + " for response type " + messageDescription.MessageType.Name);
                }
            }
            return((IDirectResponseProtocolMessage)ctor.Invoke(new object[] { request }));
        }