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.