我需要在不同的地方注入X
的多个实例。
我实现了一个自定义Guice Provider来提供类X的不同实例,如下所示。
public class XProvider implements Provider<X> {
private final Factory f;
private final String NAME = "Something String";
@Inject
public XProvider(Factory f) {
this.f = f;
}
public X get() {
return new X(f, NAME);
}
}
因为我需要具有不同NAME
值的不同X实例,所以我需要有多个相似的类
像XProvider1,XProvider2等只在一个领域不同。
创建一个抽象类来扩展自己没有帮助减少冗余代码的数量,因为(1)隐藏字段不好
(2)如果我不隐藏字段,我仍然需要在子类中使用构造函数。
我无法使用辅助注射,因为我不拥有X
所以我改变了它的构造函数。
必须有更好的方法来实现它,或者使用Guice或其他方法来重构我的代码。 我在这里寻找一些改变建议。
谢谢,
答案 0 :(得分:1)
如果您有预定义的有限可能参数集,则可以在guice模块中使用命名的@Provides绑定:
startHandCountFile = open("startHandCount", "rb")
self.startHandCount = pickle.load(startHandCountFile)
self.currentStartHandCount = self.startHandCount
self.startHandCount[startingTotal][1] += 1
print("print still working")
startHandCountFile.close()
startHandCountFile = open("startHandCount", 'wb')
pickle.dump(self.currentStartHandCount, startHandCountFile)
startHandCountFile.close()
然后将其注入名称
@Provides @Named("Type 1") MyClass getType1() {return new MyClass("Param of type 1");}
@Provides @Named("Type 2") MyClass getType2() {return new MyClass("Param of type 2");}
PS。您可以将任何可注入参数传递给@Provides方法,即getType2(工厂工厂){return ...