2010-06-15 4 views
0

Я хотел бы иметь центральный контейнер для сварки, который содержит все мои услуги и так далее. Однако этот контейнер будет обернут вторым контейнером, который содержит локальные настройки. Цель состоит в том, что зависимость не может быть найдена во внешнем контейнере, тогда я бы хотел выполнить поиск внутреннего контейнера.Как разрешить зависимость каскада с CDI (WELD)

Как я могу это достичь? Я предпочел бы делать что-то в отстойной манере, не возвращаясь к использованию нестандартных расширений WELD.

+0

Исправьте меня, если я ошибаюсь, но не могли бы вы просто иметь одну банку с вашими услугами, а банку «Конфигурация» с помощью методов, в которые входит служебная банка? Затем вы можете поменять свои контейнеры конфигурации на все, что вам нужно во время сборки. Не пробовал это, просто спекуляция. – Drew

+0

Это не работает в динамической среде, такой как OSGI. Weld кажется очень статическим и не очень настраиваемым программно, его все аннотации, которые запекаются во время компиляции из того, что я могу сказать. –

ответ

0

Я не думаю, что вы можете это сделать. Существует один BeanManager, который разрешает зависимости, если он есть, если его Context s (связанный с областями) содержит нужную зависимость.

+0

BeanManager не является стандартным классом javax.inject, а скорее классом реализации WELD. Я полагаю, что его ответ, но с использованием внутренних классов никогда не бывает хорошим. Это разочаровывает, так как я заметил, что точка CDI была стандартизирована ... –

+0

Я имел в виду, что это так, как должен функционировать CDI (на основе SPI). Вы не должны использовать интерфейсы SPI. – Bozho

+0

Да и это недостаток. Он очень статичен и не предлагает «динамический» способ. –