Java 使用RoboGuice避免类范围的工厂

Java 使用RoboGuice避免类范围的工厂,java,android,roboguice,Java,Android,Roboguice,我试图在我的Android项目中使用模型视图演示者模式。我正在使用优秀的RoboGuice项目来管理我的依赖关系。我正在与创建演示者实例的风格作斗争 AssistedInject似乎要求我首先注入一个工厂来创建演示者,然后使用该工厂来创建演示者的实例。注入(似乎)仅在类范围级别工作;我不能注入局部变量。我的方法不需要工厂和演示者;我只关心工厂足够长的时间来生成一个演示者。我不想让那些几乎毫无用处的工厂继续存在 更多细节 在模式的实现中,我为每个演示者和视图选择一个对另一个的引用。通常必须向演示者

我试图在我的Android项目中使用模型视图演示者模式。我正在使用优秀的RoboGuice项目来管理我的依赖关系。我正在与创建演示者实例的风格作斗争

AssistedInject似乎要求我首先注入一个工厂来创建演示者,然后使用该工厂来创建演示者的实例。注入(似乎)仅在类范围级别工作;我不能注入局部变量。我的方法不需要工厂和演示者;我只关心工厂足够长的时间来生成一个演示者。我不想让那些几乎毫无用处的工厂继续存在

更多细节 在模式的实现中,我为每个演示者和视图选择一个对另一个的引用。通常必须向演示者传递一个或多个用于与模型交互的“服务”对象。Android活动是(MVP)视图的实现。活动必须是任何Android应用程序的合成根。因此,每个活动都必须实例化一个演示者,该演示者需要一个服务以及对视图的引用

一般来说,演讲者看起来像

public class GreatStuffPresenter {
    private final SomeService service;
    private final GreatStuffView view;

    @Inject
    public GreatStuffPresenter(SomeService service, @Assisted GreatStuffView view) {
        this.service = service;
        this.view = view;
        bind();
    }

    public void bind() {
        Record r = service.getSomeRecord();
        view.setField(r.field);
    }
}
public class GreatStuffActivity extends RoboActivity {
    @Inject private final GreatStuffPresenterFactory presenterFactory;
    private GreatStuffPresenter presenter;

    @Override
    public void onCreate(...) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_update_record);

        presenter = presenterFactory.create(this);
    }
}
活动看起来像

public class GreatStuffPresenter {
    private final SomeService service;
    private final GreatStuffView view;

    @Inject
    public GreatStuffPresenter(SomeService service, @Assisted GreatStuffView view) {
        this.service = service;
        this.view = view;
        bind();
    }

    public void bind() {
        Record r = service.getSomeRecord();
        view.setField(r.field);
    }
}
public class GreatStuffActivity extends RoboActivity {
    @Inject private final GreatStuffPresenterFactory presenterFactory;
    private GreatStuffPresenter presenter;

    @Override
    public void onCreate(...) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_update_record);

        presenter = presenterFactory.create(this);
    }
}
现在怎么办?
我不满意的是,我必须在实例级别确定演示者工厂的范围;我只在
onCreate()
期间需要它。我是否错过了RoboGuice可以为我表演的其他魔法?如果没有,我是否应该使用更好的实践或模式来避免这种不必要的范围界定?

最后,我决定购买RoboGuice注入器,请求它提供我工厂的一个实例,并创建我正在寻找的演示者。我对这种方法相当满意;我不会用我不使用的变量来污染我的类,这条线看起来相当简单

public class GreatStuffActivity extends RoboActivity {
    private GreatStuffPresenter presenter;

    @Override
    public void onCreate(...) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_update_record);

        presenter = RoboGuice.getInjector(this).getInstance(GreatStuffPresenterFactory.class).create(this);
    }
}

只是一个问题-为什么不为演示者注入?我认为注入正是为了工厂移除我们不能注入presenter,因为它需要GreatStuffView,这是RoboGuice无法实例化的。