Когда вы используете [ApiController]
, ModelStateInvalidFilter
не разрешается из контейнера DI, создается с new
:
_modelStateInvalidFilter = new ModelStateInvalidFilter(
apiBehaviorOptions.Value,
loggerFactory.CreateLogger<ModelStateInvalidFilter>());
Для того, чтобы иметь возможностьРешив это из контейнера DI, нам нужно немного более подробно рассказать о том, как мы создаем экземпляр ILogger
, что можно сделать при добавлении ModelStateInvalidFilter
в контейнер DI, например:
services.AddScoped<ModelStateInvalidFilter>(sp =>
{
var loggerFactory = sp.GetRequiredService<ILoggerFactory>();
return new ModelStateInvalidFilter(
sp.GetRequiredService<ApiBehaviorOptions>(),
loggerFactory.CreateLogger<ModelStateInvalidFilter>());
});
};
В этом примере sp
является экземпляром IServiceProvider
, который мы можем использовать для запроса служб из контейнера DI.ILoggerFactory
уже зарегистрирован для нас, поэтому мы можем запросить его и использовать так же, как показано в первом фрагменте кода выше.