У нас есть пользовательский DateTimeModelBinder, который раньше нормально работал с ASP.NET Core 1.1, но после обновления до 2.2 он не работает.Это разрывная часть:
bindingContext.ModelState.TryAddModelError(
bindingContext.ModelName,
bindingContext.ModelMetadata.ModelBindingMessageProvider.ValueMustNotBeNullAccessor(
valueProviderResult.ToString()));
Ошибка:
Method not found: 'Microsoft.AspNetCore.Mvc.ModelBinding.Metadata.IModelBindingMessageProvider Microsoft.AspNetCore.Mvc.ModelBinding.ModelMetadata.get_ModelBindingMessageProvider()'.
Неисправная часть:
bindingContext.ModelMetadata.ModelBindingMessageProvider
Очевидно, что-то изменилось.Я нашел это сообщение, объясняющее немного об этом критическом изменении, но все это:
https://github.com/aspnet/Announcements/issues/240
Очевидно, что мы должны использовать DefaultModelBindingMessageProvider
сейчас, но как все приложение разделяетобщий, включая связующие для моделей?
Проблема в ModelBinders bindingContext.ModelMetadata.ModelBindingMessageProvider
, используемая для определения класса, содержащего строки, но теперь он указывает на абстрактный класс и, следовательно, завершается с ошибкой, указанной выше.
Использование этого вместо этого работает, но обновление этого класса для каждого использования кажется неправильным (также, изменения в переводах не будут отражены).
bindingContext.ModelState.TryAddModelError(
bindingContext.ModelName,
new DefaultModelBindingMessageProvider().ValueMustNotBeNullAccessor(
valueProviderResult.ToString()));
Я чувствую, что должен быть в состоянии установитьсвойство ModelBindingMessageProvider
ModelMetadata
в bindingContext
в моих файлах Startup.cs, но я не узнал, как (или я на правильном пути).Я?