Documentation
¶
Overview ¶
Package container 提供依赖注入容器功能,支持 7 层分层架构的自动依赖管理。
核心特性:
- 7 层容器:支持 Entity、Manager、Repository、Service、Controller、Middleware、Scheduler、Listener 八层容器
- 类型安全:使用泛型确保类型安全,编译时检查
- 自动注入:通过结构体标签 `inject:""` 自动注入依赖
- 拓扑排序:Service 层使用 Kahn 算法检测并解决循环依赖
- 线程安全:所有容器操作都使用读写锁保护
- 分层依赖:严格的依赖层级,Controller/Middleware/Scheduler/Listener 禁止直接注入 Repository
基本用法:
// 创建容器链(按依赖顺序)
entityContainer := container.NewEntityContainer()
repositoryContainer := container.NewRepositoryContainer(entityContainer)
serviceContainer := container.NewServiceContainer(repositoryContainer)
controllerContainer := container.NewControllerContainer(serviceContainer)
middlewareContainer := container.NewMiddlewareContainer(serviceContainer)
schedulerContainer := container.NewSchedulerContainer(serviceContainer)
listenerContainer := container.NewListenerContainer(serviceContainer)
// 注册实例
container.RegisterEntity(entityContainer, &Message{})
container.RegisterRepository[IMessageRepository](repositoryContainer, repo)
container.RegisterService[IMessageService](serviceContainer, svc)
container.RegisterController[IMessageController](controllerContainer, ctrl)
container.RegisterMiddleware[IAuthMiddleware](middlewareContainer, mw)
服务层拓扑排序:
服务层的依赖注入支持拓扑排序,确保依赖按正确顺序注入。 例如:ServiceA 依赖 ServiceB,ServiceB 依赖 ServiceC, 注入顺序为:ServiceC → ServiceB → ServiceA。循环依赖会触发 CircularDependencyError。
错误处理:
包中定义了多种错误类型:
- DependencyNotFoundError:依赖未找到
- CircularDependencyError:Service 层循环依赖
- AmbiguousMatchError:多重匹配(Entity 层同类型多个实例)
- DuplicateRegistrationError:重复注册
- InstanceNotFoundError:实例未找到
- InterfaceAlreadyRegisteredError:接口已注册
- ImplementationDoesNotImplementInterfaceError:实现未实现接口
- InterfaceNotRegisteredError:接口未注册
- ManagerContainerNotSetError:ManagerContainer 未设置
- UninjectedFieldError:标记 inject:"" 的字段注入后仍为 nil
Index ¶
- func GetController[T common.IBaseController](c *ControllerContainer) (T, error)
- func GetListener[T common.IBaseListener](l *ListenerContainer) (T, error)
- func GetManager[T common.IBaseManager](m *ManagerContainer) (T, error)
- func GetMiddleware[T common.IBaseMiddleware](m *MiddlewareContainer) (T, error)
- func GetRepository[T common.IBaseRepository](r *RepositoryContainer) (T, error)
- func GetScheduler[T common.IBaseScheduler](c *SchedulerContainer) (T, error)
- func GetService[T common.IBaseService](s *ServiceContainer) (T, error)
- func RegisterController[T common.IBaseController](c *ControllerContainer, impl T) error
- func RegisterEntity[T common.IBaseEntity](e *EntityContainer, impl T) error
- func RegisterListener[T common.IBaseListener](l *ListenerContainer, impl T) error
- func RegisterManager[T common.IBaseManager](m *ManagerContainer, impl T) error
- func RegisterMiddleware[T common.IBaseMiddleware](m *MiddlewareContainer, impl T) error
- func RegisterRepository[T common.IBaseRepository](r *RepositoryContainer, impl T) error
- func RegisterScheduler[T common.IBaseScheduler](c *SchedulerContainer, impl T) error
- func RegisterService[T common.IBaseService](s *ServiceContainer, impl T) error
- type AmbiguousMatchError
- type CircularDependencyError
- type ContainerSource
- type ControllerContainer
- type DependencyNotFoundError
- type DuplicateRegistrationError
- type EntityContainer
- func (e *EntityContainer) Count() int
- func (e *EntityContainer) GetAll() []common.IBaseEntity
- func (e *EntityContainer) GetByName(name string) (common.IBaseEntity, error)
- func (e *EntityContainer) GetByType(typ reflect.Type) ([]common.IBaseEntity, error)
- func (e *EntityContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
- func (e *EntityContainer) Register(ins common.IBaseEntity) error
- type GenericDependencyResolver
- type IDependencyResolver
- type ImplementationDoesNotImplementInterfaceError
- type InjectableContainer
- type InjectableLayerContainer
- func (c *InjectableLayerContainer[T]) Count() int
- func (c *InjectableLayerContainer[T]) GetAll() []T
- func (c *InjectableLayerContainer[T]) GetAllSorted() []T
- func (c *InjectableLayerContainer[T]) GetByType(ifaceType reflect.Type) T
- func (c *InjectableLayerContainer[T]) RegisterByType(ifaceType reflect.Type, impl T) error
- func (c *InjectableLayerContainer[T]) SetManagerContainer(container *ManagerContainer)
- type InstanceNotFoundError
- type InterfaceAlreadyRegisteredError
- type InterfaceNotRegisteredError
- type ListenerContainer
- type ManagerContainer
- func (m *ManagerContainer) Count() int
- func (m *ManagerContainer) GetAll() []common.IBaseManager
- func (m *ManagerContainer) GetAllSorted() []common.IBaseManager
- func (m *ManagerContainer) GetByType(ifaceType reflect.Type) common.IBaseManager
- func (m *ManagerContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
- func (m *ManagerContainer) GetNames() []string
- func (m *ManagerContainer) RegisterByType(ifaceType reflect.Type, impl common.IBaseManager) error
- type ManagerContainerNotSetError
- type MiddlewareContainer
- type NamedContainer
- type RepositoryContainer
- func (r *RepositoryContainer) Count() int
- func (r *RepositoryContainer) GetAll() []common.IBaseRepository
- func (r *RepositoryContainer) GetAllSorted() []common.IBaseRepository
- func (r *RepositoryContainer) GetByType(ifaceType reflect.Type) common.IBaseRepository
- func (r *RepositoryContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
- func (r *RepositoryContainer) InjectAll() error
- func (r *RepositoryContainer) RegisterByType(ifaceType reflect.Type, impl common.IBaseRepository) error
- func (r *RepositoryContainer) SetManagerContainer(container *ManagerContainer)
- type SchedulerContainer
- type ServiceContainer
- func (s *ServiceContainer) Count() int
- func (s *ServiceContainer) GetAll() []common.IBaseService
- func (s *ServiceContainer) GetAllSorted() []common.IBaseService
- func (s *ServiceContainer) GetByType(ifaceType reflect.Type) common.IBaseService
- func (s *ServiceContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
- func (s *ServiceContainer) InjectAll() error
- func (s *ServiceContainer) RegisterByType(ifaceType reflect.Type, impl common.IBaseService) error
- func (s *ServiceContainer) SetManagerContainer(container *ManagerContainer)
- type TypedContainer
- func (c *TypedContainer[T]) Count() int
- func (c *TypedContainer[T]) GetAll() []T
- func (c *TypedContainer[T]) GetByType(ifaceType reflect.Type) T
- func (c *TypedContainer[T]) GetNames() []string
- func (c *TypedContainer[T]) IsInjected() bool
- func (c *TypedContainer[T]) RangeItems(fn func(reflect.Type, T) bool)
- func (c *TypedContainer[T]) Register(ifaceType reflect.Type, impl T) error
- type UninjectedFieldError
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetController ¶ added in v0.0.6
func GetController[T common.IBaseController](c *ControllerContainer) (T, error)
GetController 按接口类型获取
func GetListener ¶ added in v0.0.7
func GetListener[T common.IBaseListener](l *ListenerContainer) (T, error)
GetListener 按接口类型获取
func GetManager ¶ added in v0.0.6
func GetManager[T common.IBaseManager](m *ManagerContainer) (T, error)
GetManager 按接口类型获取
func GetMiddleware ¶ added in v0.0.6
func GetMiddleware[T common.IBaseMiddleware](m *MiddlewareContainer) (T, error)
GetMiddleware 按接口类型获取
func GetRepository ¶ added in v0.0.6
func GetRepository[T common.IBaseRepository](r *RepositoryContainer) (T, error)
GetRepository 按接口类型获取
func GetScheduler ¶ added in v0.0.7
func GetScheduler[T common.IBaseScheduler](c *SchedulerContainer) (T, error)
GetScheduler 按接口类型获取
func GetService ¶ added in v0.0.6
func GetService[T common.IBaseService](s *ServiceContainer) (T, error)
GetService 按接口类型获取
func RegisterController ¶
func RegisterController[T common.IBaseController](c *ControllerContainer, impl T) error
RegisterController 泛型注册函数,按接口类型注册
func RegisterEntity ¶
func RegisterEntity[T common.IBaseEntity](e *EntityContainer, impl T) error
RegisterEntity 泛型注册函数,注册实体实例
func RegisterListener ¶ added in v0.0.7
func RegisterListener[T common.IBaseListener](l *ListenerContainer, impl T) error
RegisterListener 泛型注册函数,按接口类型注册
func RegisterManager ¶ added in v0.0.6
func RegisterManager[T common.IBaseManager](m *ManagerContainer, impl T) error
RegisterManager 泛型注册函数,按接口类型注册
func RegisterMiddleware ¶
func RegisterMiddleware[T common.IBaseMiddleware](m *MiddlewareContainer, impl T) error
RegisterMiddleware 泛型注册函数,按接口类型注册
func RegisterRepository ¶
func RegisterRepository[T common.IBaseRepository](r *RepositoryContainer, impl T) error
RegisterRepository 泛型注册函数,按接口类型注册
func RegisterScheduler ¶ added in v0.0.7
func RegisterScheduler[T common.IBaseScheduler](c *SchedulerContainer, impl T) error
RegisterScheduler 泛型注册函数,按接口类型注册
func RegisterService ¶
func RegisterService[T common.IBaseService](s *ServiceContainer, impl T) error
RegisterService 泛型注册函数,按接口类型注册
Types ¶
type AmbiguousMatchError ¶
type AmbiguousMatchError struct {
InstanceName string
FieldName string
FieldType reflect.Type
Candidates []string // 匹配的候选实例名称
}
AmbiguousMatchError 多重匹配错误
type CircularDependencyError ¶
type CircularDependencyError struct {
Cycle []string // 循环依赖链
}
CircularDependencyError 循环依赖错误
func (*CircularDependencyError) Error ¶
func (e *CircularDependencyError) Error() string
Error 返回错误信息
type ContainerSource ¶
ContainerSource 容器依赖源接口 容器实现此接口后,可以通过通用依赖解析器解析依赖
type ControllerContainer ¶
type ControllerContainer struct {
*InjectableLayerContainer[common.IBaseController]
// contains filtered or unexported fields
}
ControllerContainer 控制器层容器
func NewControllerContainer ¶
func NewControllerContainer(service *ServiceContainer) *ControllerContainer
NewControllerContainer 创建新的控制器容器
func (*ControllerContainer) GetDependency ¶
func (c *ControllerContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*ControllerContainer) InjectAll ¶
func (c *ControllerContainer) InjectAll() error
InjectAll 执行依赖注入
type DependencyNotFoundError ¶
type DependencyNotFoundError struct {
InstanceName string // 当前实例名称
FieldName string // 缺失依赖的字段名
FieldType reflect.Type // 期望的依赖类型
ContainerType string // 应该从哪个容器查找
Message string // 额外的错误信息
}
DependencyNotFoundError 依赖缺失错误
func (*DependencyNotFoundError) Error ¶
func (e *DependencyNotFoundError) Error() string
Error 返回错误信息
type DuplicateRegistrationError ¶
type DuplicateRegistrationError struct {
Name string
Existing interface{}
New interface{}
}
DuplicateRegistrationError 重复注册错误
func (*DuplicateRegistrationError) Error ¶
func (e *DuplicateRegistrationError) Error() string
Error 返回错误信息
type EntityContainer ¶
type EntityContainer struct {
// contains filtered or unexported fields
}
EntityContainer 实体层容器 Entity 层无依赖,无 InjectAll 操作
func (*EntityContainer) GetAll ¶
func (e *EntityContainer) GetAll() []common.IBaseEntity
GetAll 获取所有已注册的实体
func (*EntityContainer) GetByName ¶
func (e *EntityContainer) GetByName(name string) (common.IBaseEntity, error)
GetByName 根据名称获取实体
func (*EntityContainer) GetByType ¶
func (e *EntityContainer) GetByType(typ reflect.Type) ([]common.IBaseEntity, error)
GetByType 根据类型获取实体 返回所有实现了该类型的实体列表
func (*EntityContainer) GetDependency ¶
func (e *EntityContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口) Entity返回列表,但依赖注入需要单个实例,所以返回第一个匹配项 如果有多个匹配项,返回错误
func (*EntityContainer) Register ¶
func (e *EntityContainer) Register(ins common.IBaseEntity) error
Register 注册实体实例
type GenericDependencyResolver ¶
type GenericDependencyResolver struct {
// contains filtered or unexported fields
}
GenericDependencyResolver 通用依赖解析器 支持按优先级顺序从多个容器源解析依赖
func NewGenericDependencyResolver ¶
func NewGenericDependencyResolver( sources ...ContainerSource, ) *GenericDependencyResolver
NewGenericDependencyResolver 创建通用依赖解析器
func (*GenericDependencyResolver) ResolveDependency ¶
func (r *GenericDependencyResolver) ResolveDependency(fieldType reflect.Type, structType reflect.Type, fieldName string) (interface{}, error)
ResolveDependency 解析字段类型对应的依赖实例 按照sources的顺序依次尝试解析,找到第一个匹配的依赖
type IDependencyResolver ¶
type IDependencyResolver interface {
ResolveDependency(fieldType reflect.Type, structType reflect.Type, fieldName string) (interface{}, error)
}
IDependencyResolver 依赖解析器接口 各容器通过实现此接口提供自己的依赖解析逻辑
type ImplementationDoesNotImplementInterfaceError ¶
type ImplementationDoesNotImplementInterfaceError struct {
InterfaceType reflect.Type
Implementation interface{}
}
ImplementationDoesNotImplementInterfaceError 实现未实现接口错误
func (*ImplementationDoesNotImplementInterfaceError) Error ¶
func (e *ImplementationDoesNotImplementInterfaceError) Error() string
Error 返回错误信息
type InjectableContainer ¶ added in v0.0.6
type InjectableContainer interface {
InjectAll() error
}
InjectableContainer 可注入容器接口
type InjectableLayerContainer ¶ added in v0.0.6
type InjectableLayerContainer[T any] struct { // contains filtered or unexported fields }
InjectableLayerContainer 可注入层容器基类 为 Controller、Middleware 和 Listener 容器提供公共实现
func NewInjectableLayerContainer ¶ added in v0.0.6
func NewInjectableLayerContainer[T any](nameFunc func(T) string) *InjectableLayerContainer[T]
NewInjectableLayerContainer 创建新的可注入层容器
func (*InjectableLayerContainer[T]) Count ¶ added in v0.0.6
func (c *InjectableLayerContainer[T]) Count() int
Count 获取实例数量
func (*InjectableLayerContainer[T]) GetAll ¶ added in v0.0.6
func (c *InjectableLayerContainer[T]) GetAll() []T
GetAll 获取所有实例
func (*InjectableLayerContainer[T]) GetAllSorted ¶ added in v0.0.6
func (c *InjectableLayerContainer[T]) GetAllSorted() []T
GetAllSorted 获取所有实例并按名称排序
func (*InjectableLayerContainer[T]) GetByType ¶ added in v0.0.6
func (c *InjectableLayerContainer[T]) GetByType(ifaceType reflect.Type) T
GetByType 按类型获取实例
func (*InjectableLayerContainer[T]) RegisterByType ¶ added in v0.0.6
func (c *InjectableLayerContainer[T]) RegisterByType(ifaceType reflect.Type, impl T) error
RegisterByType 按类型注册实例
func (*InjectableLayerContainer[T]) SetManagerContainer ¶ added in v0.0.6
func (c *InjectableLayerContainer[T]) SetManagerContainer(container *ManagerContainer)
SetManagerContainer 设置管理器容器
type InstanceNotFoundError ¶
InstanceNotFoundError 实例未找到错误
type InterfaceAlreadyRegisteredError ¶
type InterfaceAlreadyRegisteredError struct {
InterfaceType reflect.Type
ExistingImpl interface{}
NewImpl interface{}
}
InterfaceAlreadyRegisteredError 接口已被注册错误
func (*InterfaceAlreadyRegisteredError) Error ¶
func (e *InterfaceAlreadyRegisteredError) Error() string
Error 返回错误信息
type InterfaceNotRegisteredError ¶
InterfaceNotRegisteredError 接口未注册错误
func (*InterfaceNotRegisteredError) Error ¶
func (e *InterfaceNotRegisteredError) Error() string
Error 返回错误信息
type ListenerContainer ¶ added in v0.0.7
type ListenerContainer struct {
*InjectableLayerContainer[common.IBaseListener]
// contains filtered or unexported fields
}
ListenerContainer 监听器层容器
func NewListenerContainer ¶ added in v0.0.7
func NewListenerContainer(service *ServiceContainer) *ListenerContainer
NewListenerContainer 创建新的监听器容器
func (*ListenerContainer) GetDependency ¶ added in v0.0.7
func (l *ListenerContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*ListenerContainer) InjectAll ¶ added in v0.0.7
func (l *ListenerContainer) InjectAll() error
InjectAll 执行依赖注入
func (*ListenerContainer) SetManagerContainer ¶ added in v0.0.7
func (l *ListenerContainer) SetManagerContainer(container *ManagerContainer)
SetManagerContainer 设置管理器容器
type ManagerContainer ¶ added in v0.0.6
type ManagerContainer struct {
// contains filtered or unexported fields
}
ManagerContainer 管理器层容器
func NewManagerContainer ¶ added in v0.0.6
func NewManagerContainer() *ManagerContainer
NewManagerContainer 创建新的管理器容器
func (*ManagerContainer) Count ¶ added in v0.0.6
func (m *ManagerContainer) Count() int
Count 返回已注册的管理器数量
func (*ManagerContainer) GetAll ¶ added in v0.0.6
func (m *ManagerContainer) GetAll() []common.IBaseManager
GetAll 获取所有已注册的管理器
func (*ManagerContainer) GetAllSorted ¶ added in v0.0.6
func (m *ManagerContainer) GetAllSorted() []common.IBaseManager
GetAllSorted 获取所有已注册的管理器(按名称排序)
func (*ManagerContainer) GetByType ¶ added in v0.0.6
func (m *ManagerContainer) GetByType(ifaceType reflect.Type) common.IBaseManager
GetByType 按接口类型获取(返回单例)
func (*ManagerContainer) GetDependency ¶ added in v0.0.6
func (m *ManagerContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*ManagerContainer) GetNames ¶ added in v0.0.6
func (m *ManagerContainer) GetNames() []string
GetNames 获取所有管理器的名称
func (*ManagerContainer) RegisterByType ¶ added in v0.0.6
func (m *ManagerContainer) RegisterByType(ifaceType reflect.Type, impl common.IBaseManager) error
RegisterByType 按接口类型注册
type ManagerContainerNotSetError ¶ added in v0.0.6
type ManagerContainerNotSetError struct {
Layer string
}
ManagerContainerNotSetError ManagerContainer 未设置错误
func (*ManagerContainerNotSetError) Error ¶ added in v0.0.6
func (e *ManagerContainerNotSetError) Error() string
Error 返回错误信息
type MiddlewareContainer ¶
type MiddlewareContainer struct {
*InjectableLayerContainer[common.IBaseMiddleware]
// contains filtered or unexported fields
}
MiddlewareContainer 中间件层容器
func NewMiddlewareContainer ¶
func NewMiddlewareContainer(service *ServiceContainer) *MiddlewareContainer
NewMiddlewareContainer 创建新的中间件容器
func (*MiddlewareContainer) GetDependency ¶
func (m *MiddlewareContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*MiddlewareContainer) InjectAll ¶
func (m *MiddlewareContainer) InjectAll() error
InjectAll 执行依赖注入
type NamedContainer ¶ added in v0.0.6
type NamedContainer[T any] struct { // contains filtered or unexported fields }
NamedContainer 命名容器 使用名称字符串作为键,存储对应的实例
func NewNamedContainer ¶ added in v0.0.6
func NewNamedContainer[T any](nameFunc func(T) string) *NamedContainer[T]
NewNamedContainer 创建新的命名容器
func (*NamedContainer[T]) Count ¶ added in v0.0.6
func (c *NamedContainer[T]) Count() int
Count 返回已注册的实例数量
func (*NamedContainer[T]) GetAll ¶ added in v0.0.6
func (c *NamedContainer[T]) GetAll() []T
GetAll 获取所有已注册的实例
func (*NamedContainer[T]) GetByName ¶ added in v0.0.6
func (c *NamedContainer[T]) GetByName(name string) (T, error)
GetByName 按名称获取实例
func (*NamedContainer[T]) GetNames ¶ added in v0.0.6
func (c *NamedContainer[T]) GetNames() []string
GetNames 获取所有实例的名称
func (*NamedContainer[T]) Register ¶ added in v0.0.6
func (c *NamedContainer[T]) Register(impl T) error
Register 注册实例
type RepositoryContainer ¶
type RepositoryContainer struct {
// contains filtered or unexported fields
}
RepositoryContainer 仓储层容器
func NewRepositoryContainer ¶
func NewRepositoryContainer(entity *EntityContainer) *RepositoryContainer
NewRepositoryContainer 创建新的仓储容器
func (*RepositoryContainer) GetAll ¶
func (r *RepositoryContainer) GetAll() []common.IBaseRepository
GetAll 获取所有已注册的仓储
func (*RepositoryContainer) GetAllSorted ¶ added in v0.0.6
func (r *RepositoryContainer) GetAllSorted() []common.IBaseRepository
GetAllSorted 获取所有已注册的仓储(按名称排序)
func (*RepositoryContainer) GetByType ¶
func (r *RepositoryContainer) GetByType(ifaceType reflect.Type) common.IBaseRepository
GetByType 按接口类型获取
func (*RepositoryContainer) GetDependency ¶
func (r *RepositoryContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*RepositoryContainer) InjectAll ¶
func (r *RepositoryContainer) InjectAll() error
InjectAll 执行依赖注入
func (*RepositoryContainer) RegisterByType ¶
func (r *RepositoryContainer) RegisterByType(ifaceType reflect.Type, impl common.IBaseRepository) error
RegisterByType 按接口类型注册
func (*RepositoryContainer) SetManagerContainer ¶ added in v0.0.6
func (r *RepositoryContainer) SetManagerContainer(container *ManagerContainer)
SetManagerContainer 设置管理器容器
type SchedulerContainer ¶ added in v0.0.7
type SchedulerContainer struct {
*InjectableLayerContainer[common.IBaseScheduler]
// contains filtered or unexported fields
}
SchedulerContainer 定时器层容器
func NewSchedulerContainer ¶ added in v0.0.7
func NewSchedulerContainer(service *ServiceContainer) *SchedulerContainer
NewSchedulerContainer 创建新的定时器容器
func (*SchedulerContainer) GetDependency ¶ added in v0.0.7
func (c *SchedulerContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*SchedulerContainer) InjectAll ¶ added in v0.0.7
func (c *SchedulerContainer) InjectAll() error
InjectAll 执行依赖注入
func (*SchedulerContainer) SetManagerContainer ¶ added in v0.0.7
func (c *SchedulerContainer) SetManagerContainer(container *ManagerContainer)
SetManagerContainer 设置管理器容器
type ServiceContainer ¶
type ServiceContainer struct {
// contains filtered or unexported fields
}
ServiceContainer 服务层容器
func NewServiceContainer ¶
func NewServiceContainer(repository *RepositoryContainer) *ServiceContainer
NewServiceContainer 创建新的服务容器
func (*ServiceContainer) GetAll ¶
func (s *ServiceContainer) GetAll() []common.IBaseService
GetAll 获取所有已注册的服务
func (*ServiceContainer) GetAllSorted ¶ added in v0.0.6
func (s *ServiceContainer) GetAllSorted() []common.IBaseService
GetAllSorted 获取所有已注册的服务(按名称排序)
func (*ServiceContainer) GetByType ¶
func (s *ServiceContainer) GetByType(ifaceType reflect.Type) common.IBaseService
GetByType 按接口类型获取
func (*ServiceContainer) GetDependency ¶
func (s *ServiceContainer) GetDependency(fieldType reflect.Type) (interface{}, error)
GetDependency 根据类型获取依赖实例(实现ContainerSource接口)
func (*ServiceContainer) RegisterByType ¶
func (s *ServiceContainer) RegisterByType(ifaceType reflect.Type, impl common.IBaseService) error
RegisterByType 按接口类型注册
func (*ServiceContainer) SetManagerContainer ¶ added in v0.0.6
func (s *ServiceContainer) SetManagerContainer(container *ManagerContainer)
SetManagerContainer 设置管理器容器
type TypedContainer ¶ added in v0.0.6
type TypedContainer[T any] struct { // contains filtered or unexported fields }
TypedContainer 类型化容器 使用接口类型作为键,存储对应的实现实例
func NewTypedContainer ¶ added in v0.0.6
func NewTypedContainer[T any](nameFunc func(T) string) *TypedContainer[T]
NewTypedContainer 创建新的类型化容器
func (*TypedContainer[T]) Count ¶ added in v0.0.6
func (c *TypedContainer[T]) Count() int
Count 返回已注册的实例数量
func (*TypedContainer[T]) GetAll ¶ added in v0.0.6
func (c *TypedContainer[T]) GetAll() []T
GetAll 获取所有已注册的实例
func (*TypedContainer[T]) GetByType ¶ added in v0.0.6
func (c *TypedContainer[T]) GetByType(ifaceType reflect.Type) T
GetByType 按接口类型获取实现实例
func (*TypedContainer[T]) GetNames ¶ added in v0.0.6
func (c *TypedContainer[T]) GetNames() []string
GetNames 获取所有实例的名称
func (*TypedContainer[T]) IsInjected ¶ added in v0.0.6
func (c *TypedContainer[T]) IsInjected() bool
IsInjected 返回是否已完成依赖注入
func (*TypedContainer[T]) RangeItems ¶ added in v0.0.6
func (c *TypedContainer[T]) RangeItems(fn func(reflect.Type, T) bool)
RangeItems 遍历所有实例
type UninjectedFieldError ¶ added in v0.0.6
UninjectedFieldError 未注入字段错误
func (*UninjectedFieldError) Error ¶ added in v0.0.6
func (e *UninjectedFieldError) Error() string
Error 返回错误信息