27 lines
2.1 KiB
Markdown
27 lines
2.1 KiB
Markdown
|
|
# Домашнее задание №7
|
|||
|
|
|
|||
|
|
📗 В домашнем задании нужно реализовать простой Dependency Injection (DI) контейнер.
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
DI-контейнер (контейнер внедрения зависимостей) представляет собой шаблон проектирования, который помогает управлять зависимостями в программном приложении. Поподробнее с DI контейнерами можно познакомиться здесь, а также можно посмотреть реализации уже готовых DI контейнеров на Go.
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
API для DI контейнера будет выглядеть следующим образом:
|
|||
|
|
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
type Container struct { ... }
|
|||
|
|
|
|||
|
|
func NewContainer() *Container // создать DI контейнер
|
|||
|
|
func (c *Container) RegisterType(name string, constructor interface{}) // зарегистрировать конструктор по созданию типа
|
|||
|
|
func (c *Container) Resolve(name string) (interface{}, error) // создать объект с использованием конструктора
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке.
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
### Задание со звездочкой
|
|||
|
|
Выполнять необязательно, но если вы хотите, можете попробовать дополнительно реализовать метод RegisterSingletonType, который будет возвращать объекты одиночки, а также, если вы уже знакомы c рефлексией и дженериками в Go, то можете их тоже использовать в реализации.
|