1

Alien Factory 的Fantom IoC 框架的文档说:

您可以使用 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

但是,决定在特定场景中初始化注册表的适当方式的标准是什么?

4

1 回答 1

1

简短的回答 - 使用RegistryBuilder

冗长的答案促使我更新文档......它正在进行中,但这是当前的修订:

建立注册表

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

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

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

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

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

国际奥委会服务

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

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

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

IocService是一个辅助类,它扩展了“服务”并包含用于创建和访问注册表的便捷方法。

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

IocService([MyModule#]).start()

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

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

像其他任何一样卸载IocService

Service.find(IocService#).uninstall()
于 2015-01-08T02:39:13.357 回答