gpt4 book ai didi

java - Guice:根据谁得到它注入(inject)不同的实现?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:23 24 4
gpt4 key购买 nike

我有两个第三方类,它们都实现了 Authorizer 接口(interface)。我需要为每个注入(inject)不同的实现。

如果我做一个@Provides,我如何实现它以便它提供运行时所需的实现?提供者不知道谁要求注入(inject)。

理论上我可以使用@Named,但我不能修改被注入(inject)的代码。我想做类似的事情:

bind(Authorizer.class).to(ImplA.class).for(SomeClass.class)
bind(Authorizer.class).to(ImplB.class).for(SomeOtherClass.class)

显然,“for”代码不存在,但是是否有一些等效的方法来做到这一点?

最佳答案

您可以使用 Private Modules 实现此目的,它允许您安装(相互不可访问的)冲突绑定(bind),用于构建一组有限的非冲突公开绑定(bind)。这通常被视为 robot legs problem 的解决方案。 ,您希望(例如)在其中公开一个 @Left Leg 和一个 @Right Leg,其中 Leg 对象正是相同,但您在层次结构中进一步绑定(bind)了不同的 Foot 实现(LeftFootRightFoot)。

此时,您没有指定“谁得到它”,但是您为一个消费者和另一个消费者公开了一个略有不同的注入(inject)器图。

install(new PrivateModule() {
bind(Authorizer.class).to(ImplA.class);
expose(SomeClass.class);
});
install(new PrivateModule() {
bind(Authorizer.class).to(ImplB.class);
expose(SomeOtherClass.class);
});

关于java - Guice:根据谁得到它注入(inject)不同的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186724/

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