Пожалуйста, смотрите код ниже:
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, который не принимает аргументов. Это просто опечатка или я упустил что-то важное? Код, кажется, работает правильно без строки кода.
Я блуждаю, должен ли какой-либо из классов ниже: «Альтернативная реализация, основанная на метаданных типа», быть синглтоном?
@ Ценг, спасибо. Считаете ли вы, что какой-либо из классов под заголовком: «Альтернативная реализация, основанная на метаданных типа» должен быть синглтоном? Возможно, автор забыл добавить два аргумента?
Очевидно, что из комментариев примеры кода не были помечены как код в исходном сообщении, а сообщения MSDN (и комментарии), как известно, удаляют угловые скобки (<
, >
) и содержимое между ними, поэтому информация о типе, вероятно, была потеряна. когда он был возвращен в кодовые блоки. Вероятно, это должно быть services.AddSingleton<IValidationAttributeAdapterProvider, CustomValidatiomAttributeAdapterProvider>();
из предыдущего примера кода.
Я не вижу в этом разделе ни одного введенного типа, все они new
d
@Tseng, я не понимаю твой последний комментарий. Я знаю, что такое внедрение зависимостей.
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
.
Никогда не было такой беспараметрической/бестиповой перегрузки
AddSingleton
вIServiceCollection
, это ошибка в сообщении в блоге. Вызов метода без параметров/типа не имеет смысла, поскольку этот метод используется для регистрации новых типов (или экземпляров, или фабрик) в абстракциях контейнера DI/IoC .NET Core.