2016-03-31 12 views
5

Dagger 2 ma walidację podczas kompilacji, więc dlaczego adnotacje zakresu mają retencję RUNTIME? Dlaczego są potrzebne w czasie wykonywania?Dlaczego adnotacje zakresu mają retencję RUNTIME w Dagger 2?

+0

Dodając do powyższego, JSR 330 na pewno nie miał na myśli sztyletu, istnieją również struktury wtryskowe zależne od środowiska wykonawczego, które * będą * potrzebować. –

Odpowiedz

4

Chociaż nie wiem na pewno, przypuszczam, że zakresy muszą mieć retencję w środowisku wykonawczym, ponieważ JSR 330's @Scope wymaga, aby zakresy były przechowywane w środowisku wykonawczym. Zarówno Dagger 1, jak i Dagger 2 reklamują kompatybilność z JSR-330 i (jak wspomina w komentarzach David) istnieje wiele rozwiązań wtryskowych opartych na zależnościach runtime, które bezwzględnie wymagają adnotacji zakresu zachowanych.

W szczególności dla Daggera, nie mogę sobie wyobrazić, dlaczego byłyby one faktycznie czytane w czasie wykonywania, choć przypuszczam, że niektóre biblioteki zewnętrzne mogłyby skorzystać z adnotacji.

Edytuj z komentarzy: To nie jest problem, dziedzictwo lub inaczej: Wiele systemów DI konfiguruje się w środowisku wykonawczym i wymaga adnotacji. Sztylet wyróżnia się tym, że tak nie jest, ale specyfikacja nie została napisana w sposób umożliwiający zachowanie czasu podtrzymania jako opcjonalnego. Dzięki temu programiści aplikacji mogą zastąpić Daggera innym środowiskiem JSR330, takim jak Guice lub Spring, i zwalniają twórców bibliotek z tego, że narzędzia i ramy zgodne z DI są agnostyczne, niezależnie od tego, czy są skonfigurowane w czasie kompilacji czy skonfigurowane w czasie wykonywania. Ta przejrzystość (tzn. Bez opcji implementacji) i elastyczność (czas kompilacji lub środowisko wykonawcze) wydaje się warta kosztów niepotrzebnej retencji adnotacji i kosztów nauki.

+0

To jest jak stary problem? Nie upraszcza używania Dagger 2. –

+0

Dzięki, bardzo pomogłeś. –

Powiązane problemy