我正在为我的 Android 应用程序遵循 MVC 模式,并且遇到过几次这个问题并且不得不解决它。 当我的应用程序能够使用字段上的@Inject 注释创建注入对象时,该对象@Inject 字段为空,通常会导致崩溃。 例如,我有将处理逻辑和流程的控制器类。任何片段/活动都会回调到它们的控制器以通知用户交互/状态更改。但是,注入的 Controller 实例通常为空。
我将举一个简单的例子来说明。下面,控制器创建了一个注入的活动,然后通过添加一个片段来使用它来启动流程。该依赖关系被处理,但控制器上的活动依赖关系不是(即空)。
处理业务逻辑和流程的简单控制器类:
public class SomeController {
@Inject
SomeActivity someActivity;
private SomeComponent component;
private final Application app;
@Inject
public SomeController(Application app) {
this.app = app;
}
private void startActivity() {
component = Dagger_SomeComponent().builder()
.someModule(app)
.build();
someActivity.getFragmentManager().beginTransaction().
.add(R.id.content, SomeFragment.class, null)
.commit();
}
public void activityStarted() {
//callback when Activity is ready...
}
}
处理用户交互并回调控制器以执行一些业务逻辑的简单活动:
public class SomeActivity extends Activity {
@Inject
SomeController controller;
private void controllerCallback() {
//notify controller of something here...
}
}
用于将对象注入图形的简单模块类:
@Module
public class SomeModule {
private Application app;
public SomeModule(Application app) {
this.app = app;
}
@Provides
@Singleton
SomeController provideSomeController( return new SomeController(app); )
@Provides
SomeActivity provideSomeActivity( return new SomeActivity();)
}
用于提供使用对象的方法的简单组件类:
@Component
public interface SomeComponent {
void addController(SomeController controller);
SomeController controller();
SomeActivity activity();
}