Guice重写NamedCache绑定

时间:2018-03-14 08:13:35

标签: playframework guice ehcache

我正在使用Play 2.6和Play缓存抽象。

我在应用程序中配置了2个缓存,名称为" x"和" y"。

在测试期间,我想用我的假缓存实现覆盖每个缓存。

缓存使用@NamedCache("X") val cache: AsyncCacheApi@NamedCache("Y") val cache: AsyncCacheApi进行注释,但我似乎无法在模块中覆盖它们:

    class FakeCacheModule extends AbstractModule {
      override def configure(): Unit = {
        bind(classOf[AsyncCacheApi]).annotatedWith(Names.named("X")).toInstance(new FakeCache)
        bind(classOf[AsyncCacheApi]).toInstance(new FakeCache)
        bind(classOf[AsyncCacheApi]).annotatedWith(Names.named("Y")).toInstance(new FakeCache)
      }
    }

这些约束都不起作用。

1 个答案:

答案 0 :(得分:0)

Names.named("")返回com.google.inject.name.Named的实例,但缓存绑定使用play.cache.NamedCache注释。

Names.named()的实施是:

public static Named named(String name) {
    return new NamedImpl(name);
}

并分别使用实现NamedCache的{​​{1}}实例获取NamedCacheImpl注释的工作绑定。因此,工作解决方案将是

NamedCache