Nano Hash - криптовалюты, майнинг, программирование

Что означает multi:true в провайдерах в angular4

Я использую HTTP_INTERCEPTORS в angular4. Для этого я создал класс HttpServiceInterceptor, который реализует интерфейс HttpInterceptor и предоставляет определение метода intercept. Затем зарегистрировал провайдера для HTTP_INTERCEPTORS вот так

providers: [{
    provide: HTTP_INTERCEPTORS,
    useClass: HttpServiceInterceptor,
    multi: true
}],

и это работает нормально. Но все же я не понимаю, что здесь означает multi:true? Я прочитал этот ответ.

Если я уберу опцию multi:true, тогда будет ошибка на стороне браузера

Uncaught Error: Provider parse errors:
Mixing multi and non multi provider is not possible for token InjectionToken_HTTP_INTERCEPTORS ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
    at NgModuleProviderAnalyzer.webpackJsonp.487.NgModuleProviderAnalyzer.parse (vendor.js:36335)
    at NgModuleCompiler.webpackJsonp.487.NgModuleCompiler.compile (vendor.js:43184)
    at JitCompiler.webpackJsonp.487.JitCompiler._compileModule (vendor.js:51527)
    at vendor.js:51472
    at Object.then (vendor.js:26354)
    at JitCompiler.webpackJsonp.487.JitCompiler._compileModuleAndComponents (vendor.js:51470)
    at JitCompiler.webpackJsonp.487.JitCompiler.compileModuleAsync (vendor.js:51399)
    at PlatformRef_.webpackJsonp.0.PlatformRef_._bootstrapModuleWithZone (vendor.js:4746)
    at PlatformRef_.webpackJsonp.0.PlatformRef_.bootstrapModule (vendor.js:4732)
    at Object.<anonymous> (app.js:23366)

Означает ли это, что HTTP_INTERCEPTORS является мультипровайдером, который инициализирует несколько директив или компонентов? Если да, то каковы другие директивы и компоненты?


  • Multi-Provider не имеет ничего общего с директивами или компонентами. В приведенном ответе директивы упоминаются только в качестве примера. 11.12.2017
  • поэтому, согласно ответу, HTTP_INTERCEPTOR - это токен, который предоставляет несколько директив, регистрация нового провайдера переопределит других зарегистрированных провайдеров? 11.12.2017
  • Он предоставляет несколько значений для токена. Опять же, это не имеет ничего общего с директивами. 11.12.2017
  • Перехватчик не является директивой или компонентом. провайдеры предоставляют экземпляры сервисов. Когда используется multi, провайдер разрешает добавлять сервис к массиву сервисов (здесь, перехватчиков), зарегистрированных для данного токена. Таким образом, HttpClient получит массив перехватчиков, которые будут вызываться по цепочке. 11.12.2017

Ответы:


1

Мультипровайдеры не имеют ничего общего с директивами. В этом ответе директивы упоминаются только в качестве примера.

Учитывая, что FOO является токеном инъекции, это

providers: [
  { provide: FOO, useClass: Bar, multi: true },
  { provide: FOO, useClass: Baz, multi: true }
]

делает FOO внедренную зависимость массивом нескольких провайдеров, которые были назначены этому токену, т.е. это то же самое, что:

providers: [
  { provide: FOO, useValue: [Bar, Baz] }
]

Разница в том, что мультипровайдеры могут быть определены в нескольких местах на одном и том же инжекторе, а все дополнительные { provide: FOO, multi: true, ... } образуют массив от push до FOO.

11.12.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..