public static IMvcBuilder AddProtoBuf(this IMvcBuilder builder, Action <ProtoBufFormatterOptions>?setupAction = null)
        {
            var options = new ProtoBufFormatterOptions();

            setupAction?.Invoke(options);

            foreach (var extension in options.SupportedExtensions)
            {
                foreach (var contentType in options.SupportedContentTypes)
                {
                    builder.AddFormatterMappings(m => m.SetMediaTypeMappingForFormat(extension, new MediaTypeHeaderValue(contentType)));
                }
            }

            builder.Services.AddOptions <MvcOptions>()
            .Configure <ILoggerFactory>((mvcOptions, loggerFactory) => ConfigureMvcOptions(options, mvcOptions, loggerFactory));

            return(builder);
        }
 private static void ConfigureMvcOptions(ProtoBufFormatterOptions options, MvcOptions mvcOptions, ILoggerFactory loggerFactory)
 {
     mvcOptions.InputFormatters.Add(new ProtoBufInputFormatter(options, mvcOptions, loggerFactory.CreateLogger <ProtoBufInputFormatter>()));
     mvcOptions.OutputFormatters.Add(new ProtoBufOutputFormatter(options, mvcOptions));
 }