2017-02-15 3 views
2

Я использую каркас Dagger 2 DI в своем приложении. В настоящее время я создаю структуру каталогов для своей активности аутентификации.Кинжал 2 вводит зависимости в Фрагмент? Столб кинжала?

У меня есть AppComponent и AppModule, которые охвачены аннотацией ApplicationScope.

Для отдельных видов деятельности у меня есть @ActivityScope. У меня есть одно действие под названием AuthenticationActivity, и его единственная задача - представить два фрагмента - LoginFragment и SignUpFragment, чтобы пользователь мог перетащить viewpager для изменения между ними. Теперь, мой вопрос заключается в том, как я должен расположить свой кинжал?

@Subcomponent(modules{LoginModule.class}) 
public interface LoginComponent{ 
    void inject(LoginFragment fragment); 
} 

Мое приложение компонент будет выглядеть::

@Component(modules={AppModule.class}) 
public interface AppComponent{ 
    AuthenticationComponent plus(AuthenticationModule module); 
} 
Мне нужно создать подкомпонентой для LoginFragment, например, как этот

@Subcomponent(modules{}) 
public interface AuthenticationComponent{ 
    LoginComponent plus(LoginModule module); 
} 

И мой LoginComponent может выглядеть так, что ли

Мне просто интересно, есть ли более элегантный способ (например, избегать создания AuthenticationComponent) Спасибо заранее! Любые советы будут высоко оценены!

+1

Вы можете. Вам не обязательно. Черт, если бы вы хотели, чтобы у вас мог быть только один глобальный компонент, который все делает. Вопрос в том, какую ценность, по вашему мнению, вы бы получили, имея подкомпонент? Я не вижу здесь многого. –

+0

@GabeSechan Спасибо за ваш комментарий. Я не думаю, что я ввожу что-нибудь в AuthenticationActivity. Целью этого действия является попытка отобразить эти два фрагмента с помощью viewpager. Поэтому я предполагаю, что не получаю никакого значения наличия подкомпонента authenticationActivity. –

+0

@GabeSechan Я догадываюсь, что у меня было много вложенных подкомпонентов, и я автоматически подумал, что я делаю это неправильно (впервые использовал Dagger 2 в большом проекте) –

ответ

1

Я думаю, что двух областей (ApplicationScope и ActivityScope) достаточно. Просто вводите фрагменты через определенный компонент активности.

+0

Привет! Спасибо за ваш ответ. Тем не менее, я не просил погоды или не вводил в нее весь Фрагмент. Я просто спрашивал, нужен ли мне этот AuthenticationComponent вообще, так как стек получает 2 уровня в глубину (с двумя подкомпонентами) –

+1

Я не уверен, что хорошо понимаю вас, но вам определенно не нужны два подкомпонента. – YMY

+0

Я вижу. Спасибо за ваш ответ! :) –

Смежные вопросы