goioc 是一个 Go IOC 框架
加载配置文件
loader := gioc.NewConfigLoader() err := loader.Load("example/conf/config.json") util.VerifyNoError(err)
创建IBeanContainerBuilder
builder := gioc.NewBeanContainerBuilder()
加入1个ITagParser和若干个ITagProcessor
builder.AddBean(loader) builder.AddBean(gioc.NewBeanTagProcessor(builder.GetBeanContainer())) builder.AddBean(gioc.NewConfigValueTagProcessor(loader)) builder.AddBean(gioc.NewTagParser()) builder.AddBean(gioc.NewBeanBeanConditionInjector())
加入专属bean
builder.AddBean(otherBeans...)
构建容器
builder.Build()
放入容器中的对象就是一个bean,容器可以针对bean的成员变量做一些注入操作,比如其它bean实例的注入,或者配置数据的注入
用来构建bean容器,并完成注入,bean的注入操作由ITagProcessor完成 构建过程
通过内嵌接口IBeanCondition来实现条件判断,只有生效的bean才会被容器操作
标注在bean上,可以执行一些特定意义的注入,目前支持两种系统级tag: bean和cfg
type BeanC struct { beanA IBeanA `bean:"" bean.name:"beana" bean.required:"true"` }
type BeanConfig struct { Name string Level int Age int } type Bean struct { // 注入配置文件的配置项"cfg.a" ConfigA *BeanConfig `cfg:"cfg.a"` // 注入配置文件的配置项"cfg.b" ConfigB *BeanConfig `cfg:"cfg.b"` }
可以通过实现接口ITagProcessor来自定义tag注入器,你还可以为它指定一个优先级,如果它没有任何依赖,则可以设置为系统级tag
解析tag标签,容器中只能存在一个,而且必须有一个,用来解析tag
请查看example1.go/example2.go/example3.go/example4.go
https://github.com/gosrv/gcluster ioc容器的应用:游戏服务器引擎框架(用来开发游戏引擎的引擎)