Guice MapBinder:如何使用 providesIntoSet 在 Guice 中绑定 map<String, Hashset>?

Guice MapBinder: How to bind map<String, Hashset> in Guice using providesIntoSet?

尝试了以下实现:

private class TestModule extends AbstractModule {

    @Override
    public void configure() {
        MapBinder<String, Set<Filter>> filterBinder = MapBinder.newMapBinder(binder(), new TypeLiteral<String>(){}, new TypeLiteral<Set<Filter>>(){});
        filterBinder.addBinding("firstKeyInMap").to(Key.get(new TypeLiteral<Set<Filter>>(){}, Names.named("Filters")));
    }

    @ProvidesIntoSet
    @Named("Filters")
    public Filter getFilter1() {
        return mock(Filter1.class);
    }

    @ProvidesIntoSet
    @Named("Filters")
    public Filter Filter2() {
        return mock(Filter2.class);
    }

}

抱歉,我有一个错误。任何纠正它的线索?

com.google.inject.CreationException: Unable to create injector, see the following errors:

No implementation for java.util.Set annotated with @com.google.inject.name.Named(value=Filters) was bound.

错误是 Guice 无法找到 Set 的实现。问题在于@ProvidesIntoSet。

探索了一些网络资源并从 https://github.com/google/guice/wiki/Guice40

中找到了以下语句

Multibinder or MapBinder items can be bound using @ProvidesIntoSet or @ProvidesIntoMap by installing a MultibindingsScanner.

我看到 MultibindingsScanner 模块功能将在 java 文档中默认实现。我不确定为什么我需要明确安装它。顺便说一句,我正在使用 Guice 4.0。

安装了 MultibindingsScanner,一切都很顺利。