这是我的Gin模块:
public class FooGinModule extends AbstractGinModule {
@Override
protected void configure() {
...
bind(ActivityManager.class).asEagerSingleton();
...
}
@Provides
@Singleton
public ActivityManager getActivityManager(EventBus eventBus, SimplePanel display,
ActivityMapper activityMapper) {
final ActivityManager activityManager = new ActivityManager(activityMapper, eventBus);
activityManager.setDisplay(display);
return activityManager;
}
}
当我尝试gwt编译时,我得到以下错误:
[错误]找不到类的@Inject或默认构造函数com.google.gwt.activity.shared.ActivityManager
我指定的@Provides
方法是否错误?
您不需要显式绑定,事实上我认为它会覆盖@Provides
方法。我不知道有什么好方法可以将asEagerSingleton()
与@Provides
方法结合使用,而是考虑Provider<T>
实现。
bind(ActivityManager.class)
.toProvider(MyActivityManagerProvider.class)
.asEagerSingleton();
查看您正在生成/连接的实际内容,我发现将@Inject
实例ActivityManager
实际SimplePanel
(或用作显示的任何对象)的父对象,并在那里调用setDisplay
是很有用的。至少对我来说,这使更换或更改显示器变得更容易,因为它是代码块的一部分,而不是模块的一部分。它还消除了创建热切的单例的需要。