2016-09-22 14 views
2

我已经在我的项目中使用匕首2最近使用,如何在Android的MVP图层之间使用注入?

的问题是,当我尝试建立我的项目,在其中注入像下面为空我登录 活动的主持人,

,当我尝试生成项目

主持人不能没有@Inject构造函数或从@规定外或@可生产标注的方法...

提供

我不明白我做错了什么??请有人帮我这个,

在此先感谢。

这里是我的登录活动,这里的主持人为空,这表明,我已经不注射得当

@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

您需要通知其观点想用注射的匕首,在您的组件。 您必须在成分改变注入功能码如下:

void inject(LoginActivity activity); 

用于显示你想要的匕首,你需要通过发送它作为组件文件注入功能不能使用@dagger注解。因为你做了正确:

@Inject 
LoginPresenter presenter; 

匕首将搜索类型LoginPresenter你的模块中的变量,并发现使用类型正确的供应商的方法。

你把你的组件作为论据“注入”功能告诉我当然什么查看您要做的注射液(要注入不算什么)

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

你能更明显的匕首,想要注入演示者,这是什么样的答案?吴 –