我想开始将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);
答案 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