Google Guice:注入原始数据结构的正确方法
Google Guice: right way to inject primitive data structure
private HashSet<WorkWindow> childWorkWindows;
@Inject
public CompositeWorkWindows (
HashSet childWorkWindows
) {
this.childWorkWindows = childWorkWindows;
}
Guice 知道如何自动注入这个而无需在模块中指定任何内容吗?
我担心的是我在私有字段中指定了 HashSet 的类型。
必须先绑定
在您的配置中:
@Provides HashSet<WorkWindow> provideChildWorkWindows() {
// Create and return your HashSet<WorkWindow>
}
那么只有它可以注射到您的 CompositeWorkWindows
.
如果您想绑定多个独立的 WorkWindow
,请使用 Guice 的多重绑定。但在那种情况下,您应该使用接口 Set
作为接收者,而不是 HashSet
实现,因为 Guice 将提供 Set
而不是 HashSet
。请注意,多重绑定允许您在不同模块中拥有元素的定义。
在MyModule.java
:
Multibinder<WorkWindow> workWindowBinder = Multibinder.newSetBinder(binder(), WorkWindow.class);
workWindowBinder.addBinding().toInstance(new MyWorkWindow());
在OtherModule.java
:
Multibinder<WorkWindow> workWindowBinder = Multibinder.newSetBinder(binder(), WorkWindow.class);
workWindowBinder.addBinding().to(OtherWorkWindow.class);
在FinalModule.java
:
Multibinder<WorkWindow> workWindowBinder = Multibinder.newSetBinder(binder(), WorkWindow.class);
workWindowBinder.addBinding().toProvider(new FinalWorkWindowProvider());
如果注入器中存在所有模块,您将得到一个大小为 3 的 Set
,其中包含您创建的三个不同的 WorkWindow
。
private HashSet<WorkWindow> childWorkWindows;
@Inject
public CompositeWorkWindows (
HashSet childWorkWindows
) {
this.childWorkWindows = childWorkWindows;
}
Guice 知道如何自动注入这个而无需在模块中指定任何内容吗?
我担心的是我在私有字段中指定了 HashSet 的类型。
必须先绑定
在您的配置中:
@Provides HashSet<WorkWindow> provideChildWorkWindows() {
// Create and return your HashSet<WorkWindow>
}
那么只有它可以注射到您的 CompositeWorkWindows
.
如果您想绑定多个独立的 WorkWindow
,请使用 Guice 的多重绑定。但在那种情况下,您应该使用接口 Set
作为接收者,而不是 HashSet
实现,因为 Guice 将提供 Set
而不是 HashSet
。请注意,多重绑定允许您在不同模块中拥有元素的定义。
在MyModule.java
:
Multibinder<WorkWindow> workWindowBinder = Multibinder.newSetBinder(binder(), WorkWindow.class);
workWindowBinder.addBinding().toInstance(new MyWorkWindow());
在OtherModule.java
:
Multibinder<WorkWindow> workWindowBinder = Multibinder.newSetBinder(binder(), WorkWindow.class);
workWindowBinder.addBinding().to(OtherWorkWindow.class);
在FinalModule.java
:
Multibinder<WorkWindow> workWindowBinder = Multibinder.newSetBinder(binder(), WorkWindow.class);
workWindowBinder.addBinding().toProvider(new FinalWorkWindowProvider());
如果注入器中存在所有模块,您将得到一个大小为 3 的 Set
,其中包含您创建的三个不同的 WorkWindow
。