Не уверен, что название ясно, но то, что я на самом деле является:Dagger2 инъекции в дочерний объект
модуль:
@Module
public class TestUserModule {
User user;
public TestUserModule(User user) {
this.user = user;
}
@Provides
@Singleton
public User providesUser() {
return user;
}
}
Компонент:
@Singleton
@Component(modules = {TestUserModule.class})
public interface UserComponent {
void inject(MyActivity activity);
void inject(MyActivity2 activity);
}
в моем приложении я создаю компонент например:
userComponent = DaggerUserComponent.builder().testUserModule(new TestUserModule(user)).build();
Итак, в моей деятельности все в порядке, я могу использовать @Inject User user;
, он отлично работает.
Теперь в моей деятельности, если я создаю объект Foo, который выглядит следующим образом:
public class Foo {
@Inject
User user;
MyActivity activity;
public Foo(MyActivity activity){
this.activity = activity;
}
}
По инстанцированию Foo в моей деятельности с new Foo()
, я знаю, что мой пользователь не будет введен.
Так что мой вопрос в том, что я должен обновить в своем коде, чтобы иметь возможность вводить объект Foo в свою деятельность (я думаю, что это способ сделать, если я хочу ввести пользователя в Foo, но скажите мне, неверно)?
Кроме того, где хорошее место для сборки моего компонента? Все в приложении?
Спасибо-х
Спасибо за ваш ответ, но что, если в конструкторе Foo я хочу получить свою активность, из которой я ввожу Foo? Я могу это сделать ? С чем-то вроде @Inject public Foo (активность MyActivity) {} –
Это звучит как круговая зависимость, которая, вероятно, не очень хорошая идея. Почему бы просто не определить метод 'attach (Activity act)' и вызвать его после создания экземпляра 'Foo'? – Ognyan
Да, это было просто знать, есть ли способ избежать прикрепления (Activity), но я сделаю это таким образом, спасибо –