AddSingleton() с конструктором без аргументов

Пожалуйста, смотрите код ниже:

services.AddMvc();

services.AddSingleton();

services.Configure(o =>
        o.ClientModelValidatorProviders.Add(new YouTubeModelValidatorProvider()));

Это было взято из блога Microsoft здесь: https://blogs.msdn.microsoft.com/mvpawardprogram/2017/01/03/asp-net-core-mvc/. Я получаю сообщение об ошибке компиляции, потому что нет метода AddSingleton, который не принимает аргументов. Это просто опечатка или я упустил что-то важное? Код, кажется, работает правильно без строки кода.

Я блуждаю, должен ли какой-либо из классов ниже: «Альтернативная реализация, основанная на метаданных типа», быть синглтоном?

Никогда не было такой беспараметрической/бестиповой перегрузки AddSingleton в IServiceCollection, это ошибка в сообщении в блоге. Вызов метода без параметров/типа не имеет смысла, поскольку этот метод используется для регистрации новых типов (или экземпляров, или фабрик) в абстракциях контейнера DI/IoC .NET Core.

Tseng 09.04.2019 10:32

@ Ценг, спасибо. Считаете ли вы, что какой-либо из классов под заголовком: «Альтернативная реализация, основанная на метаданных типа» должен быть синглтоном? Возможно, автор забыл добавить два аргумента?

w0051977 09.04.2019 10:38

Очевидно, что из комментариев примеры кода не были помечены как код в исходном сообщении, а сообщения MSDN (и комментарии), как известно, удаляют угловые скобки (<, >) и содержимое между ними, поэтому информация о типе, вероятно, была потеряна. когда он был возвращен в кодовые блоки. Вероятно, это должно быть services.AddSingleton<IValidationAttributeAdapterProvider, CustomValidatiomAttributeAdapterProvider>(); из предыдущего примера кода.

Tseng 09.04.2019 10:39

Я не вижу в этом разделе ни одного введенного типа, все они newd

Tseng 09.04.2019 10:42

@Tseng, я не понимаю твой последний комментарий. Я знаю, что такое внедрение зависимостей.

w0051977 09.04.2019 14:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
335
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I get a compilation error because there is no method called AddSingleton, which accepts no arguments. Is this just a typo or am I missing something important here?

Для этой строчки services.AddSingleton(); я считаю ошибкой забыть убрать или так и должно быть services.AddSingleton<IValidationAttributeAdapterProvider,CustomValidatiomAttributeAdapterProvider>();.

Как Conclusion из блога

In summary, client validation rules require the implementation of the IClientModelValidator interface. If the client rule comes from a validation attribute we may inherit from AttributeAdapterBase, otherwise we have to implement it from the scratch. Client rules based on validation attributes are installed by substituting the default IValidationAttributeAdapterProvider and configuring the custom implementation in the ConfigureServices section of our application. If not, we need to implement the basic IClientModelValidatorProvider interface, and add it to the ClientModelValidatorProviders list contained in the MVcViewOptions. On the JavaScript side, we must provide a function that implements the actual validation logic and an adapter that takes care of attaching properly this validation logic to the input field, when it is invoked by the unobtrusive attributes parser.

Для services.AddSingleton<IValidationAttributeAdapterProvider,CustomValidatiomAttributeAdapterProvider>(); это соответствует configuring the custom implementation in the ConfigureServices section of our application.

Для services.Configure(o => o.ClientModelValidatorProviders.Add(new YouTubeModelValidatorProvider())); это соответствует add it to the ClientModelValidatorProviders list contained in the MVcViewOptions.

Другие вопросы по теме