public IQueue GetQueue(string uri) { Guard.AgainstNullOrEmptyString(uri, "uri"); var queue = _queues.Find( candidate => Find(candidate, uri)); if (queue != null) { return(queue); } lock (Padlock) { queue = _queues.Find( candidate => Find(candidate, uri)); if (queue != null) { return(queue); } var queueUri = new Uri(uri); if (queueUri.Scheme.Equals("resolver")) { var resolvedQueueUri = _uriResolver.GetTarget(queueUri); if (resolvedQueueUri == null) { throw new KeyNotFoundException(string.Format(EsbResources.UriNameNotFoundException, _uriResolver.GetType().FullName, uri)); } queue = new ResolvedQueue(CreateQueue(GetQueueFactory(resolvedQueueUri), resolvedQueueUri), queueUri); } else { queue = CreateQueue(GetQueueFactory(queueUri), queueUri); } _queues.Add(queue); return(queue); } }