2

我有一个名为 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 实例,这意味着该 dog 实例在 C 类的不同实例之间共享。我需要做什么如果我想为每个类实例创建一个新的 dog 实例C?

为简洁起见,我没有为字段添加代码。

4

0 回答 0