
Facebook Go inject 库的依赖注入类型规范
使用 github.com/facebookgo/inject 库进行依赖注入时,需要注意以下类型要求:
-
必须使用指针类型: 注入的变量必须是指针类型 (
*Type),因为库需要修改被注入对象的实际值。 直接使用值类型将导致注入失败。 -
类型名首字母必须大写: 被注入类型的名称必须以大写字母开头,以便库能够正确识别和引用该类型。这是 Go 语言的导出规则。
以下是一个符合规范的代码示例:
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:""`
// ... other fields
}
func (a *App) Create() string {
return a.Name + " created"
}
func main() {
db := &DBEngine{Name: "db1"} // 注意此处使用指针
app := &App{Name: "go-app"} // 注意此处使用指针
var g inject.Graph
_ = g.Provide(
&inject.Object{Value: app},
&inject.Object{Value: db},
)
_ = g.Populate()
fmt.Println(app.Create())
}
严格遵守以上规则,才能确保 facebookgo/inject 库能够正确地完成依赖注入。 不符合规范的类型将无法被正确注入,可能导致程序运行错误或 panic。










