簡體   English   中英

如何在android中的MVP層之間使用注入?

[英]how to use injection between MVP layers in android?

我最近一直在我的項目中使用Dagger 2

問題是當我嘗試構建我的項目時,我的登錄活動中注入的演示者如下所示為 null

當我嘗試構建項目時

如果沒有@Inject 構造函數或來自@Provides- 或@Produces-注釋的方法,則無法提供presenter...

我不明白我做錯了什么??請有人幫我解決這個問題,

提前致謝。

這是我的登錄活動,這里的演示者為空,這表明我沒有正確注入它

@Inject
LoginPresenter presenter;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    InjectHelper.getRootComponent().injectPresenter(this);
    presenter.setProgressBarVisiblity(View.INVISIBLE);
}

這是我的演示者模塊

 @Module
 public class PresenterModule {
 private final LoginActivity activity;

public PresenterModule(LoginActivity activity) {
    this.activity = activity;
}

@Provides
@Singleton
public LoginActivity providesView() {

    return activity;
}
}


@Provides
@Singleton
public LoginPresenter providesPresenter()
{
    return new LoginPresenter();
}
}

這個注入助手類

public class InjectHelper {
  private static RootComponent sRootComponent;

static {
    initModules();
}

private static void initModules() {
    sRootComponent = getRootComponentBuilder().build();
}

public static DaggerRootComponent.Builder getRootComponentBuilder() {
    return DaggerRootComponent.builder();
}

public static RootComponent getRootComponent() {
    if (sRootComponent == null) {
        initModules();
    }
    return sRootComponent;
}

}

這是根組件類

@Singleton
@Component(modules = {
     PresenterModule.class
})
public interface RootComponent {
void injectLoginView(LoginPresenter loginPresenter);
}

您需要在組件中通知匕首哪些視圖要使用注入。 您必須將組件中的注入功能代碼更改為以下內容:

    void inject(LoginActivity activity);

為了顯示你想要的匕首,你需要使用@dagger 注釋,而不是通過在組件文件中將其作為注入函數發送。 正如你所做的那樣:

@Inject
LoginPresenter presenter;

Dagger 將在您的模塊中搜索類型為 LoginPresenter 的變量,並使用該類型找到正確的提供程序方法。

您在組件中作為“注入”函數參數的內容告訴 Dagger 您將要注入的視圖(而不是您想要注入的視圖)

@Singleton
@Component(modules = {PresenterModule.class})
public interface RootComponent {
    void inject(LoginActivity activity);
}

暫無
暫無

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

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