写点什么

长安链研究笔记 -IOC 容器

作者:
  • 2022 年 7 月 13 日
  • 本文字数:708 字

    阅读完需:约 2 分钟

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star


长安链研究笔记-IOC 容器


IOC 容器在 common 项目的 cantainer 包下,这个包是长安链实现模块可扩展定制化的基础,需要研究清楚

核心方法先了解 2 个:

一个是注册实例

一个是获取实例:


看看具体的用法:

该测试方法,传递了一个构造函数:NewFoobar, 返回参数是 Foobarer

Foobarer 是一个接口:

返回的 Foobar 实例

在 Foobar 上有个 Say 函数,相当于 Foobar 是 Foobarer 的是一个实现子类


关系理清楚后,再看测试代码:

//注册了一个构造函数,可以返回Foobar	Register(NewFoobar)	//注册一个函数 返回Fooer	Register(func() Fooer { return &Foo{} })	//注解一个函数 返回Barer	Register(func() Barer { return &Bar{} })	//定义一个接口	var fb Foobarer  //这个相当于从ioc容器中通过NewFoobar 构造器获得了一个实例,  //并且实例中需要的参数,通过上面注册Fooer、Barer,填充了进去	Resolve(&fb)	fb.Say(123, "Hello World")
复制代码


看看输出结果:

这是因为调用它的 say 方法的时候,因为 foo 和 bar 通过上面的两个注册,已经注册了进去

这是最简单的用法。


然后看看它的其他用法:

这个方法有了一个 Optional 方法,参数 0. 代表,NewFoobar 构造器函数的第一个参数可以不用注入,也能正常返回 NewFoobar 构造器的创建的对象实例。


这个返回的对象,传入的参数,有两个子对象 Bar 和 Baz 都满足,但可以通过定义 Default 来优先填充进去。

这里的 dependsOn,指的是第一个参数依赖一个叫 bar 的实例。

这里面有两个可以满足对象,Bar 和 Baz,但是因为指定了名称 bar,所以只能是 Bar 这个实例被注入。

如果缺失,就会报错。

然后 name 函数可以注册对象的名称


用户头像

关注

还未添加个人签名 2018.05.04 加入

还未添加个人简介

评论

发布
暂无评论
长安链研究笔记-IOC容器_长安链_李_InfoQ写作社区