我想问一下如何注入没有任何参数的构造函数。我遇到了这个问题,但找不到解决方案。 这是我的回购课程
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);
}
}
答案 0 :(得分:1)
如果您不想注入这样的接口,则需要使用带有@Binds注释的方法创建一个@Module。
@Module
abstract class UrlModule {
@Binds
abstract UrlsSource bindUrlsSource(LocalUrlsSource source);
}
然后您将创建一个使用此模块的组件,并将其注入您的活动中。
@Component(modules = {UrlModule.class})
@Singleton
public interface AppComponent {
void inject(MainActivity activity);
}
然后在您的Application.java类中启动该组件,并在您的活动中检索它,并调用inject(),例如这样。
public final class MainApplication extends Application {
private static AppComponent appComponent;
public static AppComponent getAppComponent() {
return appComponent;
}
private static AppComponent createAppComponent(Application application) {
return DaggerAppComponent.create();
}
@Override
public void onCreate() {
super.onCreate();
appComponent = createAppComponent(this);
}
}
然后您将像这样注入依赖项。
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);
// Injects this activity.
MainApplication.getAppComponent().inject(this);
}
}