繁体   English   中英

如何获得提供者提供唯一实例的指导?

[英]How to get guice to provide a unique instance with a provider?

我有一个对象A,它执行一些重要的加载。 我为此使用提供商。 我有需要B进行初始化的对象B。 但是,在一个对象CI中,要传递A和B,并对其进行适当的准备。

是否有可能让提供者始终返回相同的实例,或者通过guice模块来保持提供该实例并就此停止?

编辑:

我在guice网站上有以下解释,但很少解释:

@Provides @Singleton
TransactionLog provideTransactionLog() {
  ...
}

是解决方案。 单例适用于提供者还是提供者。 如果适用于提供者,那么解决方案将是保留一个实例,并在每次返回。 但这不适用于Provide方法。 有什么帮助吗?

Guice的核心非常统一。 在内部,它完全基于提供程序。 链接绑定,实例绑定,提供者绑定,即时绑定, @Provides绑定-实际上, @Provides绑定都将始终在@Provides生成提供者。 因此,范围注释不能应用于提供程序,只是没有意义。 范围始终分配给实际注入的对象,因此可以确保,如果将某些绑定放入@Singleton范围,则无论此绑定的类型如何,实际注入的对象将始终相同。

因此,这些绑定中的每个绑定始终会为您提供完全相同的唯一对象(当然,您不能将所有这些绑定都放入模块中;请选择最喜欢的一个):

bind(SomeDependency.class).to(SomeDependencyImpl.class).in(Singleton.class);

bind(SomeDependency.class).toInstance(new SomeDependencyImpl());

bind(SomeDependency.class).toProvider(() -> new SomeDependencyImpl()).in(Singleton.class);

public class SomeModule extends AbstractModule {
    @Provides @Singleton
    SomeDependency someDependencyImpl() {
        return new SomeDependencyImpl();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM