Android Dagger-2 如何为方法参数提供依赖

标签 android dagger-2 dagger

我有一个模块 FragmentModule

@Module
public class FragmentModule
{
    @Provides
    public static PickerDashboardFragment providesPickerDashboard(int status, String name, Object someComplexObject)
    {
        PickerDashboardFragment fragment = new PickerDashboardFragment();
        Bundle b = new Bundle();
        b.putInt("status", status);
        b.putString("name", name);
        b.putInt("object", someComplexObject);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Provides
    public static PickingFragment providesPickingFragment()
    {
        PickingFragment fragment = new PickingFragment();
        return fragment;
    }
}

这是我的组件类

@Component(modules = {UtilModule.class, FragmentModule.class})
public interface ApplicationComponent
{
    void inject(PickerDashboardActivity target);
}

在我的 Activity 中,这就是我注入(inject) PickerDashboardActivity

的方式
@Inject 
PickerDashboardFragment frag;

ApplicationComponent component = DaggerApplicationComponent.builder().build();
        component.inject(this);

我的问题是什么是为PickerDashboardFragment providesPickerDashboard(int status, String name, Object someComplexObject) 提供依赖项的最好和最简单的方法,即状态、名称和 someComplexObject。

最好的问候

最佳答案

像这样向您的模块添加属性和Provides 方法:

@Module
public class FragmentModule
{

    private final int status;
    private final String name;
    private final Object someComplexObject;

    public FragmentModule(int status, String name, Object someComplexObject) {
        this.status = status;
        this.name = name;
        this.someComplexObject = someComplexObject;
    }

    @Provides
    int providesStatus() {
        return status;
    }

    @Provides
    String providesName() {
        return name;
    }

    @Provides
    Object providesSomeComplexObject() {
        return someComplexObjext;
    }

    @Provides
    public static PickerDashboardFragment providesPickerDashboard(int status, String name, Object someComplexObject)
    {
        PickerDashboardFragment fragment = new PickerDashboardFragment();
        Bundle b = new Bundle();
        b.putInt("status", status);
        b.putString("name", name);
        b.putInt("object", someComplexObject);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Provides
    public static PickingFragment providesPickingFragment()
    {
        PickingFragment fragment = new PickingFragment();
        return fragment;
    }
}

拥有一个提供 int 和 String 的模块可能会让您使用一些限定符(例如 Named)以避免冲突

关于Android Dagger-2 如何为方法参数提供依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235183/

相关文章:

android - 使用 React Native 访问 Android 上的相机和 CameraRoll?

dagger-2 - @CustomTestApplication 值不能用 @HiltAndroidApp 注释

unit-testing - 如何包含注释处理器生成的代码来测试 Java/Kotlin 中的类路径

android - 在 Robolectric 测试中覆盖 Dagger 模块

android - Android 内存指南中的 "Avoid dependency injection frameworks"是否也适用于 Dagger?

java - 安卓 GCM InstanceId.getToken() -> java.io.IOException : TIMEOUT

Android Activity.getParent() 总是返回 null

android - 如何防止用户在 Android Crosswalk WebView 中截屏?

android - Dagger 2 - 如何只注入(inject)基本 Activity/fragment

android - 基类中的 ViewModelProviders.get(...)