Я пытаюсь зарегистрировать поставщика метаданных пользовательской модели в веб-api 2.
поскольку эта страница говорит, что я должен позвонить
config.Services.Add(typeof (ModelMetadataProvider), new CustomModelMetadataProvider());
но с этим я получаю следующую ошибку
Тип сервиса ModelMetadataProvider не поддерживается. Имя параметра: serviceType
Немного поздно для вечеринки, но коллекция DefaultServices, привязанная к HttpConfiguration, имеет два набора подключенных к ней сервисов, Multiple (который может иметь несколько зарегистрированных реализаций) и Single (который может иметь только одну реализацию).
ModelMetadataProvider - это тип сервиса, в котором может быть зарегистрирована только одна реализация. Вызов Add пытается добавить дополнительную реализацию к уже существующему, поэтому вместо этого вызовите Replace.
config.Services.Replace(typeof(ModelMetadataProvider), new CustomModelMetadataProvider());
Вы можете переопределить ModelDataProvider, зарегистрировав службу замены в контейнере-контейнере зависимостей. Затем Web API будет использовать это вместо стандартного DataAnnotationsModelMetadataProvider.
Однако вы ограничены тем, что вы можете сделать в пользовательском поставщике метаданных. Кэширование метаданных важно для производительности в большинстве приложений, а базовая реализация ModelMetadata имеет отмеченные члены, которые жизненно важны для кэширования, как INTERNAL. Похоже, что Microsoft не намерена настраивать эту функциональность.