使用Dagger2和MVVM避免应用程序类的静态上下文

时间:2019-04-06 19:36:26

标签: java android dagger-2

我想开始将dagger 2用于我正在进行的辅助项目。

使用MVVM设计模式的android应用程序。我使用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 :(得分:0)

制作一个应用程序级组件,并以DI形式提供上下文。您的活动级别组件中提供下游的应用程序级别依赖项

答案 1 :(得分:0)

工作示例; 将应用程序上下文注入活动中。

   @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;
    }
}

现在在您的Application类中;您将必须创建匕首树;

public static ApplicationComponent appCompnent;

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


 public static ApplicationComponent getApplicationComponent() {
     return appComponent;
   }

现在进入您的MyActivity; 您只需要获取此组件并调用注入即可。

我在一篇帖子中列出了Dagger2的基本知识,并且一些研究链接希望对您有所帮助

Not able to understand dagger dependency injection concepts - Dagger 2 on android