ReplyDestination GetOrCreateReplyDestination(string replyToken, Uri targetUri)
        {
            ReplyDestination replyDestination;

            lock (this.replyDestinationsMutex)
            {
                var signatureTokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(replyToken);
                if (this.responderFactories.TryGetValue(targetUri, out replyDestination))
                {
                    replyDestination.TokenProvider.TokenProvider = signatureTokenProvider;
                }
                else
                {
                    var tokenProvider   = new DelegatingTokenProvider(signatureTokenProvider);
                    var receiverFactory = MessagingFactory.Create(targetUri.GetLeftPart(UriPartial.Authority),
                                                                  new MessagingFactorySettings {
                        TransportType = TransportType.Amqp, TokenProvider = tokenProvider
                    });
                    replyDestination = new ReplyDestination {
                        Factory = receiverFactory, TokenProvider = tokenProvider
                    };
                    this.responderFactories.Add(targetUri, replyDestination);
                }
            }
            return(replyDestination);
        }
 ReplyDestination GetOrCreateReplyDestination(string replyToken, Uri targetUri)
 {
     ReplyDestination replyDestination;
     lock (this.replyDestinationsMutex)
     {
         var signatureTokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(replyToken);
         if (this.responderFactories.TryGetValue(targetUri, out replyDestination))
         {
             replyDestination.TokenProvider.TokenProvider = signatureTokenProvider;
         }
         else
         {
             var tokenProvider = new DelegatingTokenProvider(signatureTokenProvider);
             var receiverFactory = MessagingFactory.Create(targetUri.GetLeftPart(UriPartial.Authority),
                                     new MessagingFactorySettings { TransportType = TransportType.Amqp, TokenProvider = tokenProvider });
             replyDestination = new ReplyDestination { Factory = receiverFactory, TokenProvider = tokenProvider };
             this.responderFactories.Add(targetUri, replyDestination);
         }
     }
     return replyDestination;
 }