Go 依赖注入实用指南
package main
import (
"fmt"
"github.com/facebookgo/inject"
)
type Greeter struct{}
func (g *Greeter) Greet(who string) string {
return "Hello, " + who + "!"
}
type Printer struct{}
func (p *Printer) Print(message string) {
fmt.Println(message)
}
type App struct {
Greeter *Greeter
Printer *Printer
}
func (app *App) Run(greeting string) {
message := app.Greeter.Greet(greeting)
app.Printer.Print(message)
}
func main() {
g := &Greeter{}
p := &Printer{}
app := &App{}
// 使用Graph来描述依赖关系
graph := inject.Graph{}
err := graph.Provide(&inject.Object{Value: g}, &inject.Object{Value: p})
if err != nil {
panic(err)
}
err = graph.Provide(&inject.Object{Value: app, Type: reflect.TypeOf(app)})
if err != nil {
panic(err)
}
// 注入依赖
if err := graph.Inject(app); err != nil {
panic(err)
}
app.Run("World")
}
这段代码定义了一个简单的应用程序,展示了如何使用facebookgo/inject
库来实现依赖注入。首先,我们定义了一个Greeter
和一个Printer
,它们分别负责问候和打印消息。然后我们定义了一个App
结构体,它组合了这两个组件。在main
函数中,我们创建了相关的实例,并使用inject.Graph
来描述它们之间的依赖关系,并通过Inject
方法将依赖注入到App
中。最后,我们调用App.Run
方法来运行整个应用程序。这个例子简单明了地展示了依赖注入的使用方法。
评论已关闭