Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func WithDig ¶
WithDig возвращает опцию для подключения Dig-контейнера к приложению Compogo.
Опция выполняет:
- Создание нового экземпляра Dig-контейнера
- Создание обёртки Container, реализующей интерфейс compogo.Container
- Регистрацию системного компонента "container.Dig", который:
- Регистрирует Dig-контейнер в DI (чтобы его можно было получить)
- Регистрирует обёртку Container
- Регистрирует обёртку как интерфейс compogo.Container
Пример использования:
app := compogo.NewApp("myapp",
compogo.WithConfigurator(configurator, configuratorCmp),
compogo.WithLogger(logger, loggerCmp),
compogo.WithCloser(closer, closerCmp),
dig.WithDig(), // подключаем Dig
)
// Теперь все компоненты могут регистрировать зависимости через DI:
app.AddComponents(myComponent)
Types ¶
type Container ¶ added in v0.0.7
type Container struct {
// contains filtered or unexported fields
}
Container реализует интерфейс compogo.Container на основе Uber Dig. Предоставляет удобную обёртку над dig.Container с поддержкой массовой регистрации конструкторов через метод Provides.
Используется в Compogo как стандартная реализация DI-контейнера. Позволяет регистрировать зависимости и вызывать функции с внедрёнными аргументами.
Пример:
container := NewContainer(dig.New())
container.Provide(func() *Config { return &Config{Port: 8080} })
container.Provide(func(cfg *Config) *http.Server {
return &http.Server{Addr: fmt.Sprintf(":%d", cfg.Port)}
})
container.Invoke(func(srv *http.Server) {
srv.ListenAndServe()
})
func NewContainer ¶ added in v0.0.7
NewContainer создаёт новый Container на основе переданного Dig-контейнера. Обычно используется внутри WithDig() и не требует ручного вызова.
func (*Container) Invoke ¶ added in v0.0.7
Invoke выполняет переданную функцию, внедряя в неё все необходимые зависимости из контейнера. Реализует интерфейс compogo.Container.
Пример:
container.Invoke(func(db *Database) {
db.Connect()
})
func (*Container) Provide ¶ added in v0.0.7
Provide регистрирует конструктор в контейнере. Конструктор должен быть функцией, возвращающей один или несколько сервисов. Реализует интерфейс compogo.Container.
Пример:
container.Provide(func() *Database { return &Database{DSN: "..."} })
func (*Container) Provides ¶ added in v0.0.7
Provides регистрирует несколько конструкторов за один вызов. Если хотя бы один конструктор вызывает ошибку, она возвращается. Реализует интерфейс compogo.Container.
Пример:
container.Provides(
func() *Config { return &Config{} },
func(cfg *Config) *Database { return NewDatabase(cfg) },
)