Как внедрить объект, переданный в BaseActivity, создать его с отражением (или любым другим способом, если это возможно) - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть BaseActivity, в которой я пытаюсь получить экземпляр подкласса, чтобы внедрить его с помощью кинжала.

Я пытался найти способ не проверять объект вручнуюпередается экземпляр каждого отдельного действия, но если есть более оптимальный способ сделать это.

Fi, если компонент таков:

AppComponent

@Singleton
@Component(modules = {AppModule.class})
public class AppComponent {

   public void inject(FooActivity fooActivity);
   public void inject(BarActivity barActivity);
   public void inject(…);

}

Каждое действие расширяет BaseActivity, и у нас есть что-то вроде:

FooActivity

public class FooActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.inject(this);       
    }
}

Наконец, проблема возникает при обработке BaseActivity.

BaseActivity

текущая реализация

...
 public void inject(FooActivity fooActivity) {
     DaggerAppComponent.create().inject(fooActivity)
 }

 public void inject(BarActivity barActivity) {
     DaggerAppComponent.create().inject(barActivity)
 }
... 

Тем не менее, я ищу более оптимальный способ, который уменьшает шаблон, поэтому я думал что-то вроде следующего:

BaseActivity

... 
 public void inject(Object activity) {
 // retrieve the instance of the activity
 // if possible and handle it so then we can: 
     DaggerAppComponent.create().inject(activity)
 }
... 

Но так как я должен найти его экземпляр, вместо того чтобы иметь серию, еслиоператоры с instanceof, которые мне нужно будет обновить для evЕсть ли новое занятие, есть ли способ справиться с ним более автоматически?

...