/// <summary>
        ///     Configures the messaging client to connect the remote web handler.
        /// </summary>
        public static MessagingClientBuilder UseWeb(this MessagingClientBuilder builder, Action <IHttpClientBuilder> configureBuilder)
        {
            var clientBuilder = builder.Services.AddRemoteWebMessagingClient();

            configureBuilder.Invoke(clientBuilder);
            return(builder);
        }
 /// <summary>
 ///     Configures the messaging client to connect a MongoDB database from a client.
 /// </summary>
 public static MessagingClientBuilder UseMongo(this MessagingClientBuilder builder, IConfigurationSection configuration)
 {
     builder.Services
     .AddMongoClientFactory()
     .ConfigureMongoOptions(builder.Name, configuration);
     return(builder);
 }
        /// <summary>
        ///     Registers remote WEB handler of <paramref name="messageType" />.
        /// </summary>
        /// <remarks>
        ///     Pay attention, it requires calling <see cref="UseWeb"/>.
        /// </remarks>
        /// <exception cref="ArgumentException"/>
        public static MessagingClientBuilder AddWeb(this MessagingClientBuilder builder, Type messageType)
        {
            if (!messageType.IsMessage())
            {
                throw new ArgumentException("Invalid message type.", nameof(messageType));
            }

            builder.Services.ConfigureMessagingClientOptions(builder.Name, o => o.AddWeb(messageType));
            return(builder);
        }
        /// <summary>
        ///     Registers remote MongoDB based handler of <paramref name="messageType" /> from a client.
        /// </summary>
        /// <remarks>
        ///     Pay attention, it requires calling one of UseMongo method.
        /// </remarks>
        /// <exception cref="ArgumentException"/>
        public static MessagingClientBuilder AddMongo(this MessagingClientBuilder builder, Type messageType)
        {
            if (!messageType.IsMessage())
            {
                throw new ArgumentException($"Expected message but provided {messageType}.", nameof(messageType));
            }

            builder.Services
            .TryAddSingleton <ExceptionModelConverter>()
            .ConfigureMessagingClientOptions(builder.Name, o => o.AddMongo(messageType));
            return(builder);
        }
 /// <summary>
 ///     Registers remote WEB handler of <typeparamref name="TMessage" />.
 /// </summary>
 /// <remarks>
 ///     Pay attention, it requires calling <see cref="UseWeb"/>.
 /// </remarks>
 /// <typeparam name="TMessage">Specific message type to be handled remotely.</typeparam>
 /// <exception cref="ArgumentException"/>
 public static MessagingClientBuilder AddWeb <TMessage>(this MessagingClientBuilder builder)
     where TMessage : class, IAbstractMessage => builder.AddWeb(typeof(TMessage));
 /// <summary>
 ///     Configures the messaging client to connect a MongoDB database from a client.
 /// </summary>
 public static MessagingClientBuilder UseMongo(this MessagingClientBuilder builder, string connectionString) =>
 builder.UseMongo(o => o.ConnectionString = connectionString);