9.2. 依赖管理

未匹配的标注

如有疑问请加群询问,交流群:836414068

依赖管理

依赖管理功能是 为了解决 aurora 运行中组件与组件之间存在的依赖关系,编写代码中依赖初始化操作和业务层面完全隔离,
依赖加载专注把对应的组件存放到 Ioc 容器中。在服务运行期间,被容器管理的依赖会自动初始化并装配, aurora的Ioc
系统是服务于 aurora 也许并不适用于其他更复杂的功能,仅作为依赖装配。

组件

什么是组件? 在 aurora 中组件就是一个结构体变量,组件有唯一的id对应一个变量。组件主要分为2类,匿名组件和命名组件,前者并非没有名称,只是来源于注册方式不同采用的是结构体的全名来作为id。

加载组件

加载组件,就是把初始化好的变量,注册到 aurora 的内部容器中,在服务器启动期间,会初始化容器完成指定的依赖赋值

方式一 : 命名注册

type Component map[string]interface{}
//通过 Use 方法注册 Component//注册了一个 id 为 xxx 的组件
a.Use(aurora.Component{"aaa":&{}})

方式二 : 匿名注册

//通过 Use 方法直接 指针类型的结构体
//注册了一个 id 为 Xxx 的组件
a.Use(new(Xxx))

使用组件

把组件注册到 aurora 的容器中,通过 golang tag 属性 ref:"" 来对容器中的依赖进行使用


// 通过命名方式注册了 3个组件
 a.Use(web.Component{ "a": &Aaa{Name: "Aaa"}, "b": &Bbb{Name: "Bbb"}, "c": &Ccc{Name: "Caa"}, })
type Aaa struct {
     Name  string DataB *Bbb `ref:"b"`
}

type Bbb struct {
     Name  string DataA *Aaa `ref:"a"`
}

type Ccc struct {
     Name string
}

示例中注册了3个命名组件分别是 a,b,c 。 a组件中的 DataB 属性通过 ref:"b" 引用了b组件,b组件的 DataA 也是一样的效果引用了b组件。


使用匿名注册组件,来自动初始化结构体控制器中的对应字段属性,能够达到和上面 ref tag 相同的效果

// 定义一个 组件
type Aaa struct {
     Name string
}

// 注册一个匿名组件
a.Use(&Aaa{Name: "Aaa"})

type TestServerA struct {
     TestA *Aaa
}

type TestServerB struct {
     TestA *Aaa
}

// GetName 获取 组件id为a的Name属性
func (s *TestServerB) GetName() string {
     return s.TestA.Name
}

// GetUpdate 修改组件id为 a的Name属性
func (s *TestServerA) Update() {
     fmt.Println(s.TestA.Name) s.TestA.Name = "Bbb"
}

最新文档信息可查阅 aurora-go.github.io

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~