我有一个名为Animal的界面。它有两个实现;狗和猫。因为我想在将Animal注入不同的对象时指定我想要的实现,所以我通过执行以下操作在Hilt中解决了这个问题:
@Module
@InstallIn(ApplicationComponent.class)
public abstract class ApplicationModule
{
@Named("Dog")
@Binds
public abstract Animal provideDog(Dog dog);
@Named("Cat")
@Binds
public abstract Animal provideCat(Cat cat);
}
Dog和Cat构造函数已使用@Inject注释:
public class Dog implements Animal
{
@Inject
public Dog()
{
}
}
public class Cat implements Animal
{
@Inject
public Cat()
{
}
}
如果另一个名为C的类需要一个Dog对象:
public class C
{
@Inject
public C(@Named("Dog")Animal dog)
{
}
}
如果另一个名为D的类需要一个Cat对象:
public class D
{
@Inject
public D(@Named("Cat")Animal cat)
{
}
}
当我运行该应用程序时,我意识到Hilt总是注入相同的dog实例,这意味着该狗实例在C类的不同实例之间共享。如果我需要为每个实例创建一个新的dog实例,我该怎么办C类的实例?
为简洁起见,我没有为字段添加代码。