2016-09-22 5 views
2

я использую с помощью кинжала 2 в моем проекте в последнее время,Как использовать инъекции между уровнями MVP в android?

проблема, когда я пытаюсь построить мой проект, выступающему в моей деятельности Логин , который впрыскивается, как показано ниже равна нулю,

и когда я пытаюсь построить проект

ведущий не может быть обеспечено без конструктора @Inject или от @ Provides- или @ Производит аннотированный метод ...

Я не понимаю, что я сделал неправильно ??, пожалуйста, помогите мне с этим,

спасибо заранее.

Вот моя Войти активность, выступающие здесь имеет нулевое значение, которое показывает, что я не ввел ее правильно

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

ответ

1

вам необходимо сообщить об этом крестик, какие взгляды нужно использовать инъекции, в компоненте. вы должны изменить код функции INJECT в компоненте ниже:

void inject(LoginActivity activity); 

для показа кинжала, что вы хотите, вы должны использовать @dagger аннотацию НЕ отправив его в виде функции нагнетающей в файле компоненты. как вы сделали правильно:

@Inject 
LoginPresenter presenter; 

Dagger будет искать переменную типа LoginPresenter в модуле и находит подходящий метод провайдера с использованием типа.

, что вы положили в компоненте в качестве аргумента для «впрыснуть» функция сообщает Dagger, что посмотреть вы собираетесь делать инъекцию в (не то, что вы хотите, чтобы ввести)

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

Можете ли вы быть более очевидным, конечно, I хотите ввести презентатора, какой ответ это? Оо –