Pular para o conteúdo principal
Versão: Em desenvolvimento — v0.2.3

Injeção de dependências

O pacote di resolve dependências a partir das entradas e saídas de funções construtoras. Ele é opcional e não é executado por InitializeApp().

package main

import "github.com/colibriproject-dev/colibri-sdk-go/pkg/di"

type Repository struct{}
type Service struct {
Repository Repository
}

func newRepository() Repository {
return Repository{}
}

func newService(repository Repository) Service {
return Service{Repository: repository}
}

func start(service Service) string {
return "started"
}

func main() {
container := di.NewContainer()
container.AddDependencies([]any{newRepository, newService})
container.StartApp(start)
}

Regras do container

  • Cada construtor deve retornar exatamente um valor.
  • O container resolve dependências por tipo e também por interface.
  • Mais de um construtor para o mesmo tipo exige desambiguação por tag di.
  • Dependências globais são construídas uma vez com AddGlobalDependencies.
  • Dependências ausentes ou ambíguas causam panic.
cuidado

O container usa reflexão e falha em tempo de execução. Mantenha um teste que inicialize o grafo completo de dependências.

Um exemplo maior está no pacote de exemplos do próprio SDK.