semvec/pypi-packages huggingface dataset:
pysr-abc-container 0.1.0
Интерфейс контейнера внедрения зависимостей
Requires Python: <4.0,>=3.12

# 1. Спецификация

Этот документ описывает общий интерфейс для контейнеров внедрения зависимостей.

## 1.1 Основы

Цель интерфейса `ContainerInterface` - стандартизировать использование контейнеров фреймворками и библиотеками для получения объектов и параметров (далее называемых "записями").

Термин "разработчик" в этом документе относится к лицу, реализующему `ContainerInterface` в библиотеке или фреймворке для внедрения зависимостей. Пользователи контейнеров внедрения зависимостей называются "пользователями".


### 1.1.1 Идентификаторы записей

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


### 1.1.2 Чтение из контейнера

Интерфейс `ContainerInterface` предоставляет два метода: `get` и `has`.

`get` принимает один обязательный параметр: идентификатор записи и может возвращать что угодно (значение любого типа) или вызывать исключение `NotFoundError`, если идентификатор неизвестен контейнеру. Два последовательных вызова `get` с одним идентификатором **должны** возвращать одинаковое значение. Однако в зависимости от реализации и/или конфигурации пользователя могут возвращаться разные значения, поэтому пользователям **не следует** полагаться на получение того же 
значения при последовательных вызовах.

`has` принимает один параметр: идентификатор записи и **должен** возвращать `True`, если запись с таким идентификатором существует в контейнере, и `False` в противном случае. Если `has(name)` возвращает `False`, то `get(name)` **должен** вызывать `NotFoundError`.

## 1.2 Исключения

Исключения, вызываемые непосредственно контейнером, **должны** реализовывать `ContainerErrorInterface`. Вызов метода `get` с несуществующим идентификатором **должен** вызывать `NotFoundErrorInterface`.

# 2 Рекомендации по использованию

Пользователям **не следует** передавать контейнер в объект, чтобы объект мог получить свои собственные зависимости. Это означает использование контейнера в качестве Service Locator, что является антипаттерном.

# 3. Пакет

Интерфейсы и классы, а также соответствующие исключения предоставляются как часть пакета `pysr_abc_container` Пакеты, предоставляющие реализацию контейнера, должны указывать, что они реализуют `pysr_abc_container 1.0`.