golang ioc容器

参考文档:
ioc-go
ali ioc-go

简单的demo

引用包

go get github.com/golobby/container/v3

import "github.com/golobby/container/v3"

demo

package main

import (
	"fmt"

	"github.com/golobby/container/v3"
)

type Shape interface {
	SetArea(int)
	GetArea() int
}

type Circle struct {
	a int
}

func (c *Circle) SetArea(a int) {
	c.a = a
}

func (c Circle) GetArea() int {
	return c.a
}

type Database interface {
	Connect() bool
}

var instance = container.New()

func main() {
	if err := instance.Singleton(func() Shape {
		return &Circle{a: 13}
	}); err != nil {
		fmt.Println(err)
		return
	}

	if err := instance.Call(func(s1 Shape) {
		s1.SetArea(666)
	}); err != nil {
		fmt.Println(err)
	}

	if err := instance.Call(func(s2 Shape) {
		if s2.GetArea() == 666 {
			fmt.Println("success")
		}
	}); err != nil {
		fmt.Println(err)
	}

}

可以通过通过函数、变量和结构解决。

代码取决于抽象程度

框架中简单的绑定

err := container.Singleton(func() Config {
    return &JsonConfig{...}
})

var c Config
err := container.Resolve(&c)

此ioc框架将抽象绑定到具体实现中。
绑定对象,是将抽象的实现引入ioc容器的过程。过程中可以确定解析类型、单例或者瞬态。

  • 单例绑定中:容器提供一次实例,并为所有请求返回实例。
  • 瞬态绑定中:容器总为每个请求返回一个全新的实例。
    绑定后就可以进行抽象的具体实现了,所以说代码取决于抽象而不是实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值