Android, использующий внедрение зависимостей во фрагменты

#android #dependency-injection

#Android #внедрение зависимостей

Вопрос:

Я могу использовать внедрение зависимостей для Realm успешного, я могу использовать @Inject в activity без каких-либо проблем, теперь я хочу использовать это и внедрить это во фрагменты, поскольку я новичок в использовании этого метода, я не могу этого сделать

ApplicationModule класс:

 @Module
public class ApplicationModule {

    @Provides
    Context provideApplicationContext() {
        return AlachiqApplication.getInstance();
    }

    @Provides
    @Singleton
    RealmConfiguration provideRealmConfiguration() {
        final RealmConfiguration.Builder builder = new RealmConfiguration.Builder()
                .schemaVersion(Migration.SCHEMA_VERSION)
                .deleteRealmIfMigrationNeeded()
                .migration(new Migration());
        return builder.build();
    }

    @Provides
    Realm provideDefaultRealm(RealmConfiguration config) {
        return Realm.getInstance(config);
    }
}
  

ApplicationComponent класс:

 @Component(modules = ApplicationModule.class)
@Singleton
public interface ApplicationComponent {
    void inject(ActivityRegister target);
    void inject(ActivityMain target);
    void inject(FragmentEbooks target);
    void inject(FragmentDocuments target);
    void inject(SocketServiceProvider target);
}
  

как я могу отредактировать или создать другой компонент класса и модуль, чтобы внедрить в это realm? кстати, у меня есть еще фрагмент в моем приложении

Заранее спасибо

Комментарии:

1. На самом деле вам не нужно просто добавить void inject (MyFragment fragment) в ApplicationComponent ?

2. @EpicPandaForce я тестирую это, сэр, но после этого я не могу это внедрить, если я определю это на ApplicationComponent как я могу внедрить?

Ответ №1:

Просто добавьте другой целевой метод в свой компонент, например,

 @Component(modules = ApplicationModule.class)
@Singleton
public interface ApplicationComponent {
  void inject(ActivityRegister target);
  void inject(ActivityMain target);
  void inject(SocketServiceProvider target);
  void inject(MyFragment target);
}
  

И в вашем фрагменте делайте то же самое, что вы делаете в своей деятельности.

 public class MyFragment extends Fragment{
   @inject Realm realm;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
    ((MyApplication) getActivity().getApplication()).getComponent().inject(this);
}