2016-07-13 4 views
1

Я хочу использовать инъекции в таких классах, как Adapter или пользовательский объект, которые не имеют доступа к классу MyApplication, который расширяет Application. Как я могу получить доступ к компоненту?Получение компонента кинжала без доступа к приложению

Хороший подход к использованию статических методов, как показано ниже?

public class MyApplication extends Application { 
    private static MyComponent component; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     component = DaggerMyComponent.builder() 
       .appModule(new AppModule(this)) 
       .helperModule(new HelperModule()) 
       .build(); 
    } 

    public static MyComponent getComponent(){return component;} 


} 

ответ

2

Я думаю, что использование статических объектов в этом случае вызовет утечку памяти. Вы можете следовать шаблону «Вставить все», показанному в этом great article.

Что это такое? Попробуйте ввести объект, который нуждается в Component внутри объекта, который уже был введен. В этой статье Adapter и ViewHolder (любой объект) вводится в действие (и объекты внутри адаптера тоже). Это то, чего вы пытаетесь достичь.

Я также советую вам прочитать все его статьи о кинжале 2, так как я не видел такого замечательного и расширенного руководства по функциям Dagger 2

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