簡體   English   中英

使用Dagger2和MVVM避免應用程序類的靜態上下文

[英]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的基本內容,一些研究鏈接希望有所幫助

無法理解匕首依賴注入概念 - 在Android上的Dagger 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM