golang 的facebookgo/inject是不是只能注入指针类型

发布于 2022-09-11 21:25:08 字数 1137 浏览 27 评论 0

github.com/facebookgo/inject
类似这个:

type UserDB struct {
    Db *DBEngine `inject:""`
}

我发现如果类型把指针去掉

type UserDB struct {
    Db DBEngine `inject:""`
}

变成这样的,就注入不了, 而且只能注入首字母大写的

下面的是能跑的例子

package main

import (
    "fmt"
    "github.com/facebookgo/inject"
)

type DBEngine struct {
    Name string
}

type UserDB struct {
    Db *DBEngine `inject:""`
}

type UserService struct {
    Db *UserDB `inject:""`
}

type App struct {
    Name string
    User *UserService `inject:""`
}

func (a *App) Create() string {
    return "create app, in db name:" + a.User.Db.Db.Name+" app name :"+ a.Name
}

type Object struct {
    App *App
}

func Init() *Object {
    db := DBEngine{Name: "db1"}
    var g inject.Graph
    app := App{Name: "go-app"}

    _ = g.Provide(
        &inject.Object{Value: &app},
        &inject.Object{Value: &db},
    )
    _ = g.Populate()
    return &Object{
        App: &app,
    }

}

func main() {
    obj := Init()
    fmt.Println(obj.App.Create())
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文