在Fantom afIoc中选择IocService和RegistryBuilder的标准是什么

时间:2015-01-07 13:05:49

标签: inversion-of-control fantom

Alien Factory IoC framework Fantom的文档说明:

您可以使用IocService将IoC作为Fantom服务启动:

IocService([MyModule#]).start
...
reg     := ((IocService) Service.find(IocService#)).registry
service := reg.dependencyByType(MyService#)
...
Service.find(IocService#).uninstall

或使用RegistryBuilder手动管理Registry实例;

reg := RegistryBuilder().addModule(MyModule#).build.startup
...
service := reg.dependencyByType(MyService#)
...
reg.shutdown

但是,在特定情况下确定初始化注册表的适当方式的标准是什么?

1 个答案:

答案 0 :(得分:1)

简短回答 - 使用RegistryBuilder

长篇回答促使我更新文档......它正在进行中,但这是当前版本:

构建注册表

使用RegistryBuilder手动管理IoC Registry实例。您通常会在运行测试时执行此操作。

registry := RegistryBuilder().addModule(MyModule#).build().startup()
...
service := registry.dependencyByType(MyService#)
...
registry.shutdown()

确保从代码使用的其他IoC库中添加模块。例如,如果使用IocEnv library,则添加IocEnvModule

registry := RegistryBuilder().addModule(MyModule#).addModule(IocEnvModule#).build().startup()

IoC库模块以库命名,但后缀为Module的标准。

IocService

如果您的代码在IoC容器中运行,例如BedSheet,则容器会为您管理Registry实例。

如果运行单元测试,那么通常你会创建自己的Registry实例并将其保存为变量/字段。

另一种方法是创建一个Fantom Service来保存注册表。这在静态访问Registry的情况下很有用,例如fwt应用程序,您几乎无法控制类的创建方式。

IocService是一个帮助类,可以扩展' Service'并包含创建和访问注册表的便捷方法。

例如,创建和启动Fantom IoC服务:

IocService([MyModule#]).start()

然后,从代码中的任何位置,都可以通过以下方式访问它:

iocService := (IocService) Service.find(IocService#)
...
myService  := iocService.serviceById(MyService#.qname)

像其他任何人一样卸载IocService

Service.find(IocService#).uninstall()