Каковы критерии выбора между IocService и RegistryBuilder в Fantom afIoc?

Документация IoC-инфраструктуры Alien Factory для Fantom гласит:

Вы можете использовать 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, добавьте IocEnvModule:

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

Стандартно, что модули библиотеки IoC названы в честь библиотеки, но с Module суффикс.

IocService

Если ваш код выполняется в контейнере IoC, таком как простыня, то контейнер управляет 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()
Другие вопросы по тегам