我有两个第三方类,它们都实现了Authorizer
界面。我需要为每个注入不同的实现。
如果我做一个@Provides
,我怎样才能实现它,以便它提供运行时所需的实现?提供者不知道是谁要求注射。
理论上我可以使用@Named
,但我无法修改正在注入的代码。我想做类似的事情:
bind(Authorizer.class).to(ImplA.class).for(SomeClass.class)
bind(Authorizer.class).to(ImplB.class).for(SomeOtherClass.class)
显然,“for”代码不存在,但是是否有一些等效的方法可以做到这一点?
您可以使用以下方法实现此目的私有模块,它允许您安装(相互不可访问的)冲突的绑定,以用于构造一组有限的非冲突的绑定exposed绑定。这通常被视为解决问题的方法机器人腿问题,其中您想要(例如)公开一个@Left Leg
and a @Right Leg
哪里的Leg
对象完全相同,但绑定不同Foot
实现(LeftFoot
and RightFoot
)在层次结构中进一步向下。
此时,您没有指定“谁正在获取它”,但是您为一个消费者与另一个消费者暴露了略有不同的注入器图。
install(new PrivateModule() {
bind(Authorizer.class).to(ImplA.class);
expose(SomeClass.class);
});
install(new PrivateModule() {
bind(Authorizer.class).to(ImplB.class);
expose(SomeOtherClass.class);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)