#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);
}