Fantom afIoc 中选择 IocService 和 RegistryBuilder 的标准是什么
What is the criteria to choose between IocService and RegistryBuilder in Fantom afIoc
Alien Factory IoC framework for 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
但是在特定情况下决定初始化注册表的适当方式的标准是什么?
简短回答 - 使用 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
应用程序,您几乎无法控制 classes 的创建方式。
IocService
是一个帮助程序 class,它扩展了 'Service' 并包含用于创建和访问注册表的便捷方法。
例如,创建并启动 Fantom IoC 服务:
IocService([MyModule#]).start()
然后可以从您代码中的任何位置访问它:
iocService := (IocService) Service.find(IocService#)
...
myService := iocService.serviceById(MyService#.qname)
卸载 IocService
像任何其他一样:
Service.find(IocService#).uninstall()
Alien Factory IoC framework for 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
但是在特定情况下决定初始化注册表的适当方式的标准是什么?
简短回答 - 使用 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
应用程序,您几乎无法控制 classes 的创建方式。
IocService
是一个帮助程序 class,它扩展了 'Service' 并包含用于创建和访问注册表的便捷方法。
例如,创建并启动 Fantom IoC 服务:
IocService([MyModule#]).start()
然后可以从您代码中的任何位置访问它:
iocService := (IocService) Service.find(IocService#)
...
myService := iocService.serviceById(MyService#.qname)
卸载 IocService
像任何其他一样:
Service.find(IocService#).uninstall()