说明

在框架里,基于github.com/uber-go/dig实现的依赖注入。通过容器方式管理对如mysql、redis等基础服务实例进行管理。

方法

  • app.Container().Provide: 注入某类实例的初始化方法。
  • app.Container().Invoke: 执行函数,参数为依赖的实例变量,从容器内寻找,如果不存在,则调用Provide注入的初始化方法。

使用说明

  • main.go
    1. package main
    2. import(
    3. "github.com/ebar-go/ego/component/redis"
    4. )
    5. type SomeObject struct{
    6. Name string
    7. }
    8. func NewSomeObject() *SomeObject {
    9. return &SomeObject{}
    10. }
    11. func main() {
    12. app := ego.App()
    13. // 注入SomeObject的实例化方法
    14. app.Container().Provide(NewSomeObject)
    15. // 获取容器里注入的SomeObject实例,打印name
    16. app.Container().Invoke(func(someObject *SomeObject) {
    17. fmt.Println(someObject.Name)
    18. })
    19. }

系统组件

  1. // 使用数据库
  2. app.Container().Invoke(func(db mysql.Database) {
  3. // ...
  4. })
  5. // 使用redis
  6. app.Container().Invoke(func(conn redis.Conn) {
  7. // ...
  8. })
  9. // 使用日志
  10. app.Container().Invoke(func(logger *log.Logger) {
  11. // ...
  12. })
  13. // 使用etcd
  14. app.Container().Invoke(func(client *etcd.Client) {
  15. // ...
  16. })