Внедрить IEnumerable <IInputFormatters> - PullRequest
0 голосов
/ 11 октября 2018

Я с трудом пытаюсь внедрить IEnumerable<IInputFormatters> в другие сервисы.Я зарегистрировал свой InputFromatter, а также добавил JsonFormatters.Итак, по крайней мере должно быть 3 входных форматера, но когда я пытаюсь ввести IEnumerable<IInputFormatters>, я постоянно получаю null (как будто форматеров вообще нет).Моя регистрация выглядит так:

services.AddMvcCore(config =>
            {
                config.InputFormatters.Insert(0, new UserContextFormatter());
                config.ModelBinderProviders.Insert(0, new ModelBinderProvider());
            })
                .AddAuthorization()
                .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>())
                .AddJsonOptions(opt =>
                {
                    opt.SerializerSettings.Formatting = Formatting.Indented;
                    opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                    opt.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
                    opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                })
                .AddJsonFormatters()
                .AddApiExplorer();

Кажется, что-то легкое и глупое, но я не достаточно хорош, чтобы получить это.Есть идеи?Спасибо!

1 Ответ

0 голосов
/ 12 октября 2018

Для IEnumerable<IInputFormatters> он не зарегистрирован как сервис, поэтому вы не можете разрешить его или получить к нему доступ путем внедрения зависимости.

Для InputFormatters или ModelBinderProviders они добавляются к Action<MvcOptions> setupAction, поэтому вы можете получить к ним доступ с IOptions<MvcOptions>.

Попробуйте код ниже:

    public class HomeController : ControllerBase
{
    private readonly MvcOptions _options;
    public HomeController(IOptions<MvcOptions> options)
    {
        _options = options.Value;
        var inputFormatters = _options.InputFormatters;
        var outputFormatters = _options.OutputFormatters;
        var modelBinderProviders = _options.ModelBinderProviders;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...