Dagger 2 Android, как передать значение во время выполнения? - PullRequest
0 голосов
/ 23 июня 2019

Итак, я изучал Dagger 2 Android, но у меня возникли проблемы.Я хочу передать значение во время выполнения.Я прочитал много блогов и т. Д., Но не смог найти никакого решения.Каждый источник кинжалов рассказывает о Dagger 2, а не Dagger 2 Android.Есть ли в любом случае сделать это на Android Dagger 2 или я должен просто перейти на Dagger 2?

Это AppComponent.java

@Singleton
@Component(
        modules = {
                AndroidSupportInjectionModule.class,
                ActivityBuildersModule.class,
                AppModule.class,
        }
)
public interface AppComponent extends AndroidInjector<BaseApplication> {

    @Component.Builder
    interface Builder{

        @BindsInstance
        Builder application(Application application);

        AppComponent build();
    }
}

Это ActivityBuildersModule.java

@Module
public abstract class ActivityBuildersModule {
    //For injection class
    @AuthScope
    @ContributesAndroidInjector(
            modules = {
                    AuthModule.class,
                    InjectFragmentBuildersModule.class, //Only gonna exist on AuthActivity Scope
                    MainViewModelsModule.class,
            })
    abstract AuthActivity contributeAuthActivity();
}

Это AuthModule.java

@Module
public class AuthModule {
    //SubComponent
    @AuthScope
    @Provides
    static Tiers getTiers(){
        return new Tiers();
    }

    @AuthScope
    @Provides
    static Engine getEngine(){
        return new Engine();
    }

    @AuthScope
    @Provides
    static Car getCar(Tiers tiers, Engine engine, @Named("String1")String string){
        return new Car(tiers,engine,string);
    }

    @AuthScope
    @Provides
    static FragmentManager getFragmentManager(AuthActivity authActivity){
        return authActivity.getSupportFragmentManager();
    }
}

И наконец AuthActivity.java

public class AuthActivity extends DaggerAppCompatActivity {

    private static final String TAG = "AuthActivity";

    @Inject
    Car car;

    @Inject
    @Named("String1")
    String test1;

    @Inject
    @Named("String2")
    String test2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auth);

        car.startCar();
        car.setmBrand("new test brand");
        NavController navController= Navigation.findNavController(this,R.id.nav_host_fragment);
        navController.navigate(R.id.injectFragment);
    }

}

Итак, допустим, я хочу передать некоторую строку в Car вместо @Named ("String1"") как мне это сделать?Я решил проблему с сеттерами, но я не могу решить эту проблему каждый раз.

...