2015-01-07 25 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()