对不起,我的英语,现在,我开始学习 dagger2,我不能理解为什么我会有错误︰
错误:(9, 10) 错误︰ 不能提供 test.dagger.dagger.modules.MainActivityPresenterModule,没有 @Inject 构造函数或从 @Provides-或 @Produces-annotated 方法。 test.dagger.dagger.modules.MainActivityPresenterModule 注射在 test.dagger.view.activitys.MainActivity.mainActivityPresenterModule test.dagger.view.activitys.MainActivity 被注入 test.dagger.dagger.components.AppComponent.injectMainActivity(mainActivity)
应用程序
public class App extends Application {
private static AppComponent component;
@Override
public void onCreate() {
super.onCreate();
component = DaggerAppComponent.create();
}
public static AppComponent getComponent() {
return component;
}
}
AppComponent
@Component(modules = {MainActivityPresenterModule.class})
public interface AppComponent {
void injectMainActivity(MainActivity mainActivity);
}
MainActivityPresenterModule
@Module
public class MainActivityPresenterModule {
@Provides
MainActivityPresenter provideActivityPresenter(NetworkUtils networkUtils) {
return new MainActivityPresenter(networkUtils);
}
@Provides
NetworkUtils provideNetworkUtils(){
return new NetworkUtils();
}
}
NetworkUtils
public class NetworkUtils {
public boolean isConnection() {
return true;
}
}
MainActivityPresenter
public class MainActivityPresenter {
NetworkUtils networkUtils;
public MainActivityPresenter(NetworkUtils networkUtils) {
this.networkUtils = networkUtils;
}
public void getUser(){
if(networkUtils.isConnection()) {
Log.e("getUser", "getUser");
} else {
Log.e("no internet", "no internet connection");
}
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
@Inject
MainActivityPresenterModule mainActivityPresenterModule;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
App.getComponent().injectMainActivity(MainActivity.this);
}
}
你可以注入只有用批注的类中提供的东西 @Module
(只有使用批注的方法在该模块内 @Provides
)。所以,你可以做 @Inject MainActivityPresenter presenter
,例如,不试着注入整个模块,像你试着做。应该在上注册模块 Dagger
初始化,像这样 (在 App #onCreate)
component = DaggerAppComponent.builder()
.mainActivityPresenterModule(MainActivityPresenterModule())
.build()
在 MainActivity 中你只需要调用注入能够注入你 @Inject MainActivityPresenter presenter
或任何其他注入模块中所定义,像这样︰
@Inject MainActivityPresenter presenter
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
(application as App).component.inject(this)
// after #inject(this) above you can start using your injections:
presenter.getUser()
}
对不起,我写的activity中作为它的代码段是少得多,可以这样写,希望你就在 Java 中的查找的想法。