我想向此方法发送名称,该方法位于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);
}
答案 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");
}
}