我有一个JavaFX应用程序,想要引入Guice,因为我的代码现在充满了工厂,仅用于测试目的。
我有一个使用案例,在这个案例中,我有一个特定视图的控制器类。这个控制器类有一个视图模型,并通过控制器类的构造函数将模型传递给视图模型。
在控制器类中,我有一个联系人服务对象,提供编辑/保存/删除操作。目前,我有该对象的接口并提供实现和模拟。可以通过Factory.getInstance()方法检索此对象。
我想做的是像这样的事情:
public class NewContactController implements Initializable {
// ------------------------------------------------------------------------
// to inject by guice
// ------------------------------------------------------------------------
private ContactService contactService;
@Inject
public void setContactService(ContactService srv) {
this.contactService = srv;
}
// edit window
public NewContactController(Contact c) {
this.viewModel = new NewContactViewModel(c);
}
// new window
public NewContactController() {
this.viewModel = new NewContactViewModel();
}
@FXML
void onSave(ActionEvent event) {
//do work like edit a contcat,
contactService.editContact(viewModel.getModelToSave());
}
@Override
public void initialize(URL location, ResourceBundle resources) {
// bind to viewmodel---------------------------------------------------
}
}
我该如何实现这个功能呢?做类似的事情是一个好主意吗? 当我在寻找解决方案时,我发现了fx-guice和类似的框架,但是如何将它们结合起来呢? 特别是如何让这些字段被注入并自己实例化控制器,或者至少给它一些构造函数参数?