2015-01-07 24 views
1

的外国人厂的IoC frameworkFantom文档IocService和RegistryBuilder之间做出选择说:的标准是什么在魅影afIoc

您可以使用IocService开始的IoC为Fantom的服务:

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

或者使用RegistryBuilder手动管理注册表实例;

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

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

回答

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'并包含了创建和访问注册表的便捷方法。

例如,要创建和启动魅影的IoC服务:

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

卸载IocService像任何其他:

IocService([MyModule#]).start() 

然后在你的代码的任何地方,可以与访问

Service.find(IocService#).uninstall()