Android Dagger2如何执行依赖于默认构造函数的构造函数注入
我想问一下如何注入一个没有任何参数的构造函数。我遇到过这个问题,但找不到解决办法。 这是我的回购课程Android Dagger2如何执行依赖于默认构造函数的构造函数注入,android,dagger-2,Android,Dagger 2,我想问一下如何注入一个没有任何参数的构造函数。我遇到过这个问题,但找不到解决办法。 这是我的回购课程 public class UrlsRepository { private UrlsSource urlsSource; @Inject public UrlsRepository(UrlsSource urlsSource){ this.urlsSource = urlsSource; } public String getLand
public class UrlsRepository {
private UrlsSource urlsSource;
@Inject
public UrlsRepository(UrlsSource urlsSource){
this.urlsSource = urlsSource;
}
public String getLandingUrl(){
return urlsSource.getLoginUrl();
}
public String[] getDashboardUrls(){
return urlsSource.getDashboardUrls();
}
}
这里是界面
public interface UrlsSource{
String getLoginUrl();
String[] getDashboardUrls();
}
下面是实现
@Singleton
public class LocalUrlsSource implements UrlsSource {
@Inject
public LocalUrlsSource(){}
@Override
public String getLoginUrl() {
return Properties.LOGIN_URL;
}
@Override
public String[] getDashboardUrls() {
return Properties.DASHBOARD_URLS;
}
}
现在在我的主要活动中,我正在注入UrlsRepository,但它是空的。请导游
public class MainActivity extends Activity implements MainPresenter.View {
@Inject
UrlsRepository urlsRepository;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
如果您不想像这样注入接口,您需要创建一个带有@Binds注释方法的@Module,如下所示
@模块
抽象类URL模块{
@束缚
抽象UrlsSource bindUrlsSource(本地UrlsSource源);
}
然后您将创建一个使用此模块的组件,并将其注入到您的活动中
@Component(modules = {UrlModule.class})
@Singleton
public interface AppComponent {
void inject(MainActivity activity);
}
然后在Application.java类中启动该组件,并在活动中检索它,然后调用inject(),例如如下所示
public final class main应用程序扩展应用程序{
私有静态AppComponent;
公共静态AppComponent getAppComponent(){
返回appComponent;
}
私有静态AppComponent createAppComponent(应用程序){
返回DaggerAppComponent.create();
}
@凌驾
public void onCreate(){
super.onCreate();
appComponent=createAppComponent(此);
}
}
然后像这样注入依赖项
公共类MainActivity扩展活动实现MainPresenter.View{
@注入
UrlsRepository UrlsRepository;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注入此活动。
MainApplication.getAppComponent().inject(此);
}
}
我没有看到AndroidInjection.Injection(这个)
在您的主要活动中?我没有注入任何android组件,即活动或片段。因此,AndroidInjection不适用于我的情况。如果Dagger不创建对象(构造函数注入与创建活动的Android框架),那么在创建对象后,您必须使用组件(通常是组件。注入(这)
调用您在示例中看到的)手动注入对象。Dagger为@Inject
注释字段生成代码,但也需要调用此代码。@DavidMedenjak但在我的情况下,我不能使用组件,因为我没有任何模块来提供依赖项。或者,如果我遗漏了什么,你可以发布代码片段。@eCDroid请看下面我的答案,也许会有帮助。谢谢你的回答。你能解释一下“绑定”的目的吗?@eCDroid太好了!这里有一篇很好的文章解释了提供和绑定之间的区别。