> For the complete documentation index, see [llms.txt](https://prethink.gitbook.io/prtelegrambot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prethink.gitbook.io/prtelegrambot/ru/dependency-injection/prioritety-razresheniya-komponentov.md).

# Приоритеты разрешения компонентов

**PRTelegramBot поддерживает одновременную работу нескольких экземпляров ботов.**\
В связи с этим в библиотеке используется **система приоритетов компонентов**, которая позволяет независимо настраивать инфраструктурные зависимости (логгеры, сериализаторы, менеджеры и т.д.) для каждого экземпляра бота.

Благодаря этой системе:

* каждый бот может использовать собственные реализации компонентов (логгеры, сериализаторы, менеджеры и т.д.);
* общие компоненты могут быть заданы через DI-контейнер;
* при необходимости конкретный бот может переопределить любой компонент через билдер, не влияя на другие экземпляры ботов.

Такая модель позволяет гибко комбинировать:

* глобальную конфигурацию приложения;
* общие сервисы, предоставляемые через DI;
* точечную настройку поведения конкретного бота.

Для отдельных компонентов системы применяется единая система приоритетов. На данный момент это касается следующих компонентов:

* `ILoggerFactory`
* `ILogger` — зависит от приоритета `ILoggerFactory`
* `IWhiteListManager`
* `IAdminManager`
* `IInlineMenuConverter`
* `IPRSerializer`

**Порядок разрешения значения компонента:**

1. **Параметр, заданный в билдере** — если вы явно установили компонент через билдера, он используется в первую очередь.
2. **DI контейнер** — если компонент не задан в билдере, проверяется наличие регистрации через Dependency Injection.
3. **Значение по умолчанию** — если ни билдера, ни DI нет, используется дефолтная реализация компонента.

**Принцип работы:**\
Если параметр в билдере пустой → ищем в DI → если DI не настроен → используем значение по умолчанию.
