gioc是一个轻量级的Ioc框架,它提供注册表和工厂、依赖解决方案
go get -u github.com/vlorc/gioc
- 创建根模块
gioc.NewRootModule()
- 导入模块
NewModuleFactory(
Import(
ConfigModule,
ServerModule,
)
)
- 声明实例
NewModuleFactory(
Declare(
Instance(1), Id("id"),
Instance("ioc"), Id("name"),
),
)
- 导出实例
NewModuleFactory(
Export(
Instance(1), Id("id"),
Instance("ioc"), Id("name"),
),
)
- 条件导入
NewModuleFactory(
Condition(
HavingValue(Equal("redis"), types.StringType, "cache.type"),
Import(RedisModule),
),
Condition(
Or(
Not(HavingBean(types.StringType, "cache.type")),
HavingValue(Equal("memory"), types.StringType, "cache.type"),
),
Import(MemoryModule),
),
)
- 基本模块
import (
."github.com/vlorc/gioc"
."github.com/vlorc/gioc/module"
."github.com/vlorc/gioc/module/operation"
)
// config.go
var ConfigModule = NewModuleFactory(
Export(
Mapping(map[string]interface{}{
"id": 1,
"name": "ioc",
}),
),
)
// main.go
func main() {
NewRootModule(
Import(ConfigModule),
Bootstrap(func(param struct{ id int; name string }) {
println("id: ", param.id, " name: ",param.name)
}),
)
}
这个项目是在Apache许可证下。查看完整的许可证文本的许可证文件。
- Provider(提供商)
- 提供工厂发现
- 提供实例填充
- Factory(工厂)
- 负责生成实例
- 基本工厂有价值工厂,方法工厂,代理工厂,单例工厂,类型工厂
- Register(注册器)
- 作为工厂和选择器的连接
- 提供类型、实例、方法工厂转换
- Dependency(依赖)
- 是目标类型依赖性分析结果的集合
- 通过实例转换为注射器
- Container(容器)
- 提供Register和Provider,并且父容器组成遍历
- 转换为只读提供程序
- 转换为密封容器
- Selector(选择器)
- 通过类型和名称寻找工厂
- Module(模板)
- 导入模块
- 导出工厂
- 声明工厂
有关计划特性和未来方向的详细信息请参考路线图
依赖注入,控制反转