Сделать класс инъекционным и синглтон только с аннотацией Dagger - PullRequest
0 голосов
/ 24 октября 2018

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

public class MyApi {

    @Inject
    public MyApi(){
    }
}

Итак, я могу ввести MyApi в Fragment с помощью:

class MyFragment extends Fragment {
   @Inject
   protected MyApi myApi;
   ...
}

Таким образом, MyApi не нужно объявлять вручную вModule.Кинжал понимает это.

Мой вопрос: хочу ли я, чтобы MyApi был синглтоном, мог бы я просто добавить еще одну аннотацию вроде:

public class MyApi {
    @Inject
    @Singleton
    public MyApi(){
    }
}

Если бы кинжал понял, что это должно бытьсинглтон?Или я должен объявить в Module как:

@Module
public class MyModule {

    @Provides
    @Singleton
    MyApi providesMyApi() {
        return new MyApi();
    }
}

?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Во-первых, добавьте @Singleton поверх класса.

@Singleton
public class MyApi {
    @Inject
    public MyApi() {}
 }

Во-вторых, вам нужно будет добавить @Singleton поверх интерфейса component.

@Singleton
@Component
interface AppComponent {

Вот полное руководство по котлину, если вы заинтересованы: https://medium.com/@xiwei/simplest-dagger-example-920bbd10258

0 голосов
/ 24 октября 2018

для желаемого поведения, вам нужно применить аннотацию к классу, а не к конструктору.посмотрите:

 @Singleton
 public class MyApi {

     @Inject
     public MyApi(){
     }
 }
...