package
0.1.3
Repository: https://github.com/xwc1125/xwc1125-pkg.git
Documentation: pkg.go.dev

# README

golang 依赖注入

golang实现DI容器

基于反射实现依赖注入容器

Features

  • 注册/获取依赖
  • 基于tag自动注入依赖
  • 对于私有字段,调用SetXxx进行反射赋值。

依赖类型

  • 单例依赖
  • 实例依赖

本项目依赖

使用标准库实现,无额外依赖

依赖注入的优势

用java的人对于spring框架一定不会陌生,spring核心就是一个IoC(控制反转/依赖注入)容器,带来一个很大的优势是解耦。一般只依赖容器,而不依赖具体的类,当你的类有修改时,最多需要改动一下容器相关代码,业务代码并不受影响。

golang的依赖注入原理

总的来说和java的差不多,步骤如下:(golang不支持动态创建对象,所以需要先手动创建对象然后注入,java可以直接动态创建对象) 通过反射读取对象的依赖(golang是通过tag实现) 在容器中查找有无该对象实例 如果有该对象实例或者创建对象的工厂方法,则注入对象或使用工厂创建对象并注入 如果无该对象实例,则报错

最重要的是Ensure方法,该方法扫描实例的所有export字段,并读取di标签,如果有该标签则启动注入。 判断di标签的类型来确定注入singleton或者prototype对象

测试

  1. 单例对象在整个容器中只有一个实例,所以不管在何处注入,获取到的指针一定是一样的。
  2. 实例对象是通过同一个工厂方法创建的,所以每个实例的指针不可以相同。

# Functions

FirstUpper 字符串首字母大写.
NewContainer 容器实例化.

# Variables

No description provided by the author

# Structs

Container 容器.