gpt4 book ai didi

java - 为什么 Guice 阻止绑定(bind)到 Provider?

转载 作者:行者123 更新时间:2023-12-02 19:29:22 25 4
gpt4 key购买 nike

最近,当我使用 Google Guice 时,我尝试做这样的事情:

@Override
protected void configure() {
...
bind(Provider.class).to(ViewFactory.class);
...
}

哪里ViewFactory是:

public class ViewFactory implements Provider<SomeType> {...}

当然,Guice 不允许我执行返回错误:

1) Binding to Provider is not allowed.
{stacktrace}

无法绑定(bind)provider的原因是什么?

最佳答案

我猜是因为Provider Guice 的界面非常特别。事实上,它的所有内部机制都是通过提供者来实现的。

此外,这可能会造成歧义。如果可以绑定(bind)到提供者:

bind(SomeClass.class).to(SomeClassImpl1.class);
bind(new TypeLiteral<Provider<SomeClass>>() {}).to(() -> new SomeClassImpl2());

那么 Guice 应该在这里注入(inject)什么呢?

@Inject
OtherClass(Provider<SomeClass> someClassProvider) { ... }

是否应该是返回 SomeClassImpl1 的提供商(因为第一个绑定(bind);记住,直接注入(inject)和提供者注入(inject)在 Guice 中是可以互换的)或者它应该是返回 SomeClassImpl2 的提供者(因为第二次绑定(bind))?

确实是多余的。因为你可以注入(inject)SomeClassProvider<SomeClass>无论实际绑定(bind)如何,您都可以将类本身绑定(bind)到其提供者:

bind(SomeClass.class).toProvider(() -> new SomeClassImpl());

// Either of the following will work
@Inject
OtherClass1(Provider<SomeClass> someClassProvider) { ... }

@Inject
OtherClass2(SomeClass someClass) { ... }

关于java - 为什么 Guice 阻止绑定(bind)到 Provider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24288060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com