go 依赖注入 简单 例子 inject
软件构建的核心就是管理复杂度。 - 《Code Complete》解耦组件之间的依赖关系,避免手动配置每个组件的依赖关系。
库
例子利用库 github.com/facebookgo/inject
package mainimport ( "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())}
打印结果
create app, in db name:db1 app name :go-app
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。