/// <summary>
 /// Uses a <see cref="JsonRpcContractResolver"/> with <see cref="CamelCaseJsonRpcNamingStrategy"/> and
 /// <see cref="CamelCaseJsonValueConverter"/>.
 /// </summary>
 public static JsonRpcOptions UseCamelCaseContractResolver(this JsonRpcOptions options)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     options.ContractResolver = new JsonRpcContractResolver
     {
         NamingStrategy          = new CamelCaseJsonRpcNamingStrategy(),
         ParameterValueConverter = new CamelCaseJsonValueConverter(),
     };
     return(options);
 }
        /// <summary>
        /// Registers <see cref="IJsonRpcServiceHost"/> and <see cref="AspNetCoreRpcServerHandler"/> singletons
        /// in <see cref="IServiceCollection"/>.
        /// </summary>
        /// <param name="serviceCollection">The service collection.</param>
        /// <param name="setupAction">The delegate used to configure the <see cref="JsonRpcServiceHostBuilder"/>.</param>
        /// <returns>A builder used to register JSON RPC services and middlewares.</returns>
        public static IJsonRpcBuilder AddJsonRpc(this IServiceCollection serviceCollection,
                                                 Action <JsonRpcOptions> setupAction)
        {
            if (serviceCollection == null)
            {
                throw new ArgumentNullException(nameof(serviceCollection));
            }
            var options = new JsonRpcOptions();

            setupAction?.Invoke(options);
            var builder = new JsonRpcBuilder(options, serviceCollection);

            serviceCollection.AddSingleton(provider => builder.BuildServiceHost(provider));
            serviceCollection.AddSingleton <AspNetCoreRpcServerHandler>();
            return(builder);
        }
 public JsonRpcBuilder(JsonRpcOptions options, IServiceCollection serviceCollection)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     this.serviceCollection = serviceCollection ?? throw new ArgumentNullException(nameof(serviceCollection));
     injectServices         = options.InjectServiceTypes;
     serviceHostBuilder     = new JsonRpcServiceHostBuilder
     {
         ContractResolver = options.ContractResolver,
         LoggerFactory    = options.LoggerFactory,
         ServiceFactory   = options.ServiceFactory,
         MethodBinder     = options.MethodBinder
     };
 }