GWT - 绑定activityMapper与GIN无法正常工作

时间:2012-02-09 13:29:55

标签: gwt gin

我正在尝试使用GWT / GIN执行我的第一步。

我已经从谷歌下载了hellomvp示例,并按照此tutorial开始使用杜松子酒。

我的问题是关于HelloGinModule类的configure-method中的这一行:

bind(ActivityMapper.class).to(AppActivityMapper.class).in(Singleton.class);

在我看来,它应该将我的类“AppActivityMapper”绑定为活动的ActityManager。 但实际上从不调用类构造函数(或类的任何方法),因此不会捕获触发的事件。

AppActivityMapper类看起来像这样:

public class AppActivityMapper implements ActivityMapper {

       Provider<HelloActivity> helloActivityProvider;
       Provider<GoodbyeActivity> goodbyeActivityProvider;

       @Inject
       public AppActivityMapper(final Provider<HelloActivity> helloActivityProvider, final Provider<GoodbyeActivity> goodbyeActivityProvider) {
           this.helloActivityProvider = helloActivityProvider;
           this.goodbyeActivityProvider = goodbyeActivityProvider;
       }


       @Override
       public Activity getActivity(Place place) {
           if (place instanceof HelloPlace) {
               return helloActivityProvider.get();
           } else if (place instanceof GoodbyePlace) {
               return goodbyeActivityProvider.get();            
           }

           return null;
       }
}

在我的示例中,单击链接后调用View-Class中的代码:

presenter.goTo(new GoodbyePlace(name)); 

事件被发送到事件总线。但没有任何反应。

提前致谢

1 个答案:

答案 0 :(得分:1)

您已在GIN中的某处定义了活动映射器。但是必须在活动管理器中使用活动映射器。您在哪里创建将使用AppActivityMapper的活动管理器? 的更新

最合乎逻辑的是让活动经理远离杜松子酒。例如。在你的ginjector你将有一个方法:

interface MyInjector extends Ginjector {
   ... //other methods

  ActivityMapper  getActivityMapper();

}

然后,当您创建ginjector实例时,您可以创建一个管理器并将正确的活动映射器放入其中。例如:

 MyInjector  injector = GWT.create(MyInjector.class);
   ActivityManager manager = new ActivityManager(injector.getActivityMapper(), injector.getEventBus());

如果您有多个管理器和映射器,可能最好扩展ActivityManager类(这样您就可以将东西注入其构造函数中)。另一种解决方案是使用@Provides初始化ActivityManager。