每次如何在Dagger 2中将数据发送到我的提供范围对象

时间:2018-06-22 07:03:13

标签: android dependency-injection dagger-2 dagger

我想向此方法发送名称,该方法位于dagger 2的模块类中,我知道这是不可能的螺母,我想知道每次都可以发送数据吗?

@Provides
Toast provideToast(String name){
    Toast toast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
    toast.setText(name);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
    return toast;
}

下面是我的组件类

@Singleton
@Component(modules = {ApiModule.class,AppModule.class})
public interface ApiComponent {
   void inject(MainActivity activity);
}

1 个答案:

答案 0 :(得分:0)

Dagger提供一致的依赖关系,不适合消息文本之类的动态依赖项。通常,如果需要将图形中的依赖项与动态参数混合,则可以使用AutoFactory。在这里,您描述的是没有其他依赖关系的Toast对象的创建,因此Dagger没有理由自动进行混合。

相反,您可能想创建一个ToastFactory或类似的东西:

public class Toaster {
  @Inject public Toaster() {}  // to make this class injectable

  public Toast provideToast(String name) {
    Toast toast = Toast.makeText(context, "", Toast.LENGTH_SHORT);
    toast.setText(name);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();
    return toast;
  }
}

这不允许您注入Toast(因为它需要在运行时提供一个名称),但是您可以注入Toaster,并制作所有想要的Toast。

public class YourConsumer {
  private final Toaster toaster;

  @Inject public YourConsumer(Toaster toaster) { this.toaster = toaster; }

  public void onTrafficIncident() {
    toaster.provideToast("Encountered a jam");
  }
}