Java 匕首2无法进行构造函数注入
我有一个通过dagger 2注入依赖项的活动和片段的应用程序 我能够在活动和片段中进行字段注入,但不能在其他类中进行构造函数注入。 这是我的相关代码Java 匕首2无法进行构造函数注入,java,android,dependency-injection,dagger-2,Java,Android,Dependency Injection,Dagger 2,我有一个通过dagger 2注入依赖项的活动和片段的应用程序 我能够在活动和片段中进行字段注入,但不能在其他类中进行构造函数注入。 这是我的相关代码 @Module public abstract class MainFragmentProvider { @ContributesAndroidInjector(modules = HomeFragmentModule.class) abstract HomeFragment provideHomeFragmentFactory(); }
@Module
public abstract class MainFragmentProvider {
@ContributesAndroidInjector(modules = HomeFragmentModule.class)
abstract HomeFragment provideHomeFragmentFactory();
}
及
如何编写代码,以便通过构造函数注入直接在HomePresenter中获取依赖项,而不是在模块中编写provideMethods。我这样做是因为在这种情况下,每当我想更改构造函数参数时,我也需要更改模块代码
如何在HomePresenter的构造函数中执行类似操作
@Inject
public HomePresenter(HomeView homeView, HomeInteractor homeInteractor) {
this.homeInteractor = homeInteractor;
this.homeView = homeView;
}
为了注入构造函数,Dagger必须知道在哪里获得传递给它的参数,即。 你必须提供
HomeView HomeView,HomeInteractor HomeInteractor
因此,还要创建用于提供其他依赖项的方法:
@Provides
static HomeView provideHomeView() {
return ...
}
@Provides
static HomeInteractor provideHomeInteractor() {
return ...
}
我对dagger 2的android扩展知之甚少,但据我所知,有两种方法可以实现您所期望的结果 在相关组件中,可以使用您的类型指定方法:
interface SomeComponent {
HomePresenter presenter(); // Method name does not matter here, only the type
}
然后像这样访问它
class Home {
HomePresenter presenter;
void initialize() { //This could be your onCreate or wherever you typically inject
presenter = getSomeComponent().presenter();
}
}
或者,如果为主对象指定了注入方法,则可以请求:
interface SomeComponent {
void inject(Home home);
}
class Home {
@Inject HomePresenter presenter;
void initialize(){
getSomeComponent().inject(this);
}
}
在这两种情况下,您必须确保您的组件
包含适当的模块
s
interface SomeComponent {
void inject(Home home);
}
class Home {
@Inject HomePresenter presenter;
void initialize(){
getSomeComponent().inject(this);
}
}