mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 08:20:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			63 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package ioc
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import (
							 | 
						|||
| 
								 | 
							
									"testing"
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type UserApp struct {
							 | 
						|||
| 
								 | 
							
									UserRepo *UserRepo `inject:""` // inject=""则默认使用字段名作为组件名进行查找并注入
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									sysRepo *SysRepo
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								// 通过Inject开头函数注入,组件名为去除Inject字符串后的其余字符串,即SysRepo
							 | 
						|||
| 
								 | 
							
								func (u *UserApp) InjectSysRepo(sr *SysRepo) {
							 | 
						|||
| 
								 | 
							
									u.sysRepo = sr
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type UserRepo struct {
							 | 
						|||
| 
								 | 
							
									Name string `inject:"username"`
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type SysRepo struct {
							 | 
						|||
| 
								 | 
							
									Name string `inject:"sysname"`
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func TestInject(t *testing.T) {
							 | 
						|||
| 
								 | 
							
									Register("哈哈哈", WithComponentName("username"))
							 | 
						|||
| 
								 | 
							
									Register("呵呵呵", WithComponentName("sysname"))
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									userRepo := &UserRepo{}
							 | 
						|||
| 
								 | 
							
									Register(userRepo)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									sysRepo := new(SysRepo)
							 | 
						|||
| 
								 | 
							
									Register(sysRepo)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									userApp := new(UserApp)
							 | 
						|||
| 
								 | 
							
									Register(userApp)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									if err := InjectComponents(); err != nil {
							 | 
						|||
| 
								 | 
							
										println(err.Error())
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									println(userApp)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func TestInjectWithCname(t *testing.T) {
							 | 
						|||
| 
								 | 
							
									Register("哈哈哈", WithComponentName("username"))
							 | 
						|||
| 
								 | 
							
									Register("呵呵呵", WithComponentName("sysname"))
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									userRepo := &UserRepo{}
							 | 
						|||
| 
								 | 
							
									Register(userRepo, WithComponentName("UserRepo"))
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									userApp := new(UserApp)
							 | 
						|||
| 
								 | 
							
									Register(userApp)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									sysRepo := new(SysRepo)
							 | 
						|||
| 
								 | 
							
									Register(sysRepo, WithComponentName("SysRepo"))
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									if err := InjectComponents(); err != nil {
							 | 
						|||
| 
								 | 
							
										println(err.Error())
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
									println(userApp)
							 | 
						|||
| 
								 | 
							
								}
							 |