-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinjection.go
73 lines (59 loc) · 1.7 KB
/
injection.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package injection
import (
"os"
productservice "github.com/sebajax/go-vertical-slice-architecture/internal/product/service"
userservice "github.com/sebajax/go-vertical-slice-architecture/internal/user/service"
"github.com/sebajax/go-vertical-slice-architecture/pkg/database"
"go.uber.org/dig"
)
// container instance
var container *dig.Container
// new user service instace
var UserServiceProvider *userservice.UserService
// new product service instace
var ProductServiceProvider *productservice.ProductService
// provide components for injection
func ProvideComponents() {
// create a new container
container = dig.New()
// generate db config instance
err := container.Provide(func() *database.DbConfig {
config := database.NewDbConfig(
os.Getenv("DB_USER"),
os.Getenv("DB_PASSWORD"),
os.Getenv("DB_NAME"),
os.Getenv("DB_HOST"),
os.Getenv("DB_PORT"),
)
config.WithMigration(os.Getenv("MIGRATIONS_PATH"))
return config
})
if err != nil {
panic(err)
}
// provide the database connection injection
err = container.Provide(database.InitPool)
if err != nil {
panic(err)
}
// user provider injection
userservice.ProvideUserComponents(container)
// product provider injection
productservice.ProvideProductComponents(container)
}
// init service container
func InitComponents() error {
// user service init componets injection
UserServiceProvider = userservice.NewUserService()
err := UserServiceProvider.InitUserComponents(container)
if err != nil {
panic(err)
}
// product service init componets injection
ProductServiceProvider = productservice.NewProductService()
err = ProductServiceProvider.InitProductComponents(container)
if err != nil {
panic(err)
}
return err
}