[英]Avoid static context of application class using Dagger2 and MVVM
我想開始使用匕首2作為我正在進行的項目。
一個使用MVVM設計模式的android應用程序。 我使用Dagger 2作為依賴注入工具。 它完成了這項工作,但通常我需要在我的(模型)中進行大量注射。 我發現完成這項工作的唯一方法是擁有一個我創建的Application類的靜態實例。
所以我可以將它注入Model層,我沒有活動或應用程序上下文。 我想知道這是正確的做法還是我錯了?
//Inside Application class
private static Context context;
public static Context getContext() {
return context;
}
//Inside Model class
((MainApplication)MainApplication.getContext()).getMyComponent().inject(this);
制作應用級組件並提供上下文作為DI。 在您的活動級別組件中,提供應用程序級別依賴關系作
工作實例; 將應用程序上下文注入活動。
@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; 你只需要獲得這個組件並調用inject。
我有一篇文章,其中列出了Dagger2的基本內容,一些研究鏈接希望有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.