Избегайте статического контекста класса приложения, используя Dagger2 и MVVM - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу начать использовать кинжал 2 для моего побочного проекта, над которым я работаю.

Приложение для Android с использованием шаблона проектирования MVVM.Я использую Dagger 2 как инструмент для внедрения зависимостей.Это делает свою работу, но в целом мне нужно много инъекций внутри (модели).Единственный способ найти работу - это иметь статический экземпляр класса Application, который я делаю после его создания.

Таким образом, я могу внедрить его на уровне модели, где у меня нет активности или приложения.контекст.Мне интересно, это правильный способ или я ошибаюсь?

//Inside Application class

    private static Context context;
    public static Context getContext() {
       return context;
    }


 //Inside Model class   
((MainApplication)MainApplication.getContext()).getMyComponent().inject(this);

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Рабочий пример;Внедрение контекста приложения в действия.

   @Component
   @module({AppModule.class})
   public interface ApplicationComponent {
            @ApplicationContext
            Context getApplicationContext();

            void inject(MyActivity activity);
    } 

/* Qualifiers */
import javax.inject.Qualifier;

@Qualifier
public @interface ApplicationContext {
}

/* app Module */
import dagger.Module;

@Module
public class AppModule {
    private Context appContext;
    public AppModule(@ApplicationContext Context _context) {
        this.appContext = _context;
    }
}

Теперь в вашем классе приложения;вам придется создать Dagger Tree;

public static ApplicationComponent appCompnent;

@Override
void onCreate() {
     appCompnent = ApplicationComponent.builder().appModule(new AppModule(this)).create();
 }


 public static ApplicationComponent getApplicationComponent() {
     return appComponent;
   }

Теперь в вашей активности MyActivity;все, что вам нужно, это получить этот компонент и вызвать инъекцию.

У меня есть пост, в котором я перечислил основы Dagger2, и некоторые учебные ссылки надеются, что это поможет

Невозможнопонять концепцию внедрения зависимости от кинжала - Dagger 2 на android

0 голосов
/ 08 апреля 2019

делает компонент уровня приложения и предоставляет контекст как DI.в компоненте уровня активности укажите зависимость уровня приложения как downstream

...