android 如何在 MVP 层之间使用注入?
how to use injection between MVP layers in android?
我最近在我的项目中使用 dagger 2,
问题是当我尝试构建我的项目时,我的登录中的演示者
activity 像下面注入的 是 null,
当我尝试构建项目时
presenter 不能在没有@Inject 构造函数或@Provides- 或@Produces-注释方法的情况下提供...
我不明白我做错了什么??,请有人帮助我,
提前致谢。
这是我的登录名Activity,这里的presenter是null,说明我没注入好
@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();
}
}
这个注入助手class
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;
}
}
这是根组件class
@Singleton
@Component(modules = {
PresenterModule.class
})
public interface RootComponent {
void injectLoginView(LoginPresenter loginPresenter);
}
@Singleton
@Component(modules = {PresenterModule.class})
public interface RootComponent {
void inject(LoginActivity activity);
}
你需要在你的组件中通知 dagger 哪些视图要使用注入。
您必须将组件中的注入功能代码更改为以下内容:
void inject(LoginActivity activity);
为了向 dagger 展示你想要的东西,你需要使用 @dagger 注释,而不是将它作为注入函数发送到组件文件中。正如你所做的那样:
@Inject
LoginPresenter presenter;
Dagger 将在您的模块中搜索 LoginPresenter 类型的变量,并使用该类型找到合适的提供程序方法。
你在组件中作为 "inject" 函数参数的内容告诉 Dagger 你将要在哪个视图中注入(不是你想要注入的)
我最近在我的项目中使用 dagger 2,
问题是当我尝试构建我的项目时,我的登录中的演示者 activity 像下面注入的 是 null,
当我尝试构建项目时
presenter 不能在没有@Inject 构造函数或@Provides- 或@Produces-注释方法的情况下提供...
我不明白我做错了什么??,请有人帮助我,
提前致谢。
这是我的登录名Activity,这里的presenter是null,说明我没注入好
@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();
}
}
这个注入助手class
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;
}
}
这是根组件class
@Singleton
@Component(modules = {
PresenterModule.class
})
public interface RootComponent {
void injectLoginView(LoginPresenter loginPresenter);
}
@Singleton
@Component(modules = {PresenterModule.class})
public interface RootComponent {
void inject(LoginActivity activity);
}
你需要在你的组件中通知 dagger 哪些视图要使用注入。 您必须将组件中的注入功能代码更改为以下内容:
void inject(LoginActivity activity);
为了向 dagger 展示你想要的东西,你需要使用 @dagger 注释,而不是将它作为注入函数发送到组件文件中。正如你所做的那样:
@Inject
LoginPresenter presenter;
Dagger 将在您的模块中搜索 LoginPresenter 类型的变量,并使用该类型找到合适的提供程序方法。
你在组件中作为 "inject" 函数参数的内容告诉 Dagger 你将要在哪个视图中注入(不是你想要注入的)