public static bool PublishRequest <TRequest>(this IServiceBus bus,
                                                     TRequest message,
                                                     Action <RequestConfigurator <TRequest> > configureCallback)
            where TRequest : class
        {
            IRequest <TRequest> request = RequestConfiguratorImpl <TRequest> .Create(bus, message, configureCallback);

            PublishRequest(bus, message, request);

            return(request.Wait());
        }
        public static bool SendRequest <TRequest>(this IEndpoint endpoint,
                                                  TRequest message,
                                                  IServiceBus bus,
                                                  Action <RequestConfigurator <TRequest> > configureCallback)
            where TRequest : class
        {
            IRequest <TRequest> request = RequestConfiguratorImpl <TRequest> .Create(bus, message, configureCallback);

            SendRequest(endpoint, bus, message, request);

            return(request.Wait());
        }
        public static IAsyncResult BeginPublishRequest <TRequest>(this IServiceBus bus,
                                                                  TRequest message,
                                                                  AsyncCallback callback,
                                                                  object state,
                                                                  Action <RequestConfigurator <TRequest> > configureCallback)
            where TRequest : class
        {
            IRequest <TRequest> request = RequestConfiguratorImpl <TRequest> .Create(bus, message, configureCallback);

            PublishRequest(bus, message, request);

            return(request.BeginAsync(callback, state));
        }