2016-10-25 3 views
2

Я использую Dagger 2 инъекцию, чтобы обеспечить некоторую зависимость к клиенту:Dagger 2 инъекционных одноплодный без модуля

public class Dependency { 

    @Inject 
    Dependency() { 
    } 

    void check() { 
     System.out.print("Instantiated"); 
    } 
} 

public class Client { 

    @Inject Dependency dependency; 

    Client() { 
     ClientComponent component = DaggerClientComponent.create(); 
     component.inject(this); 
    } 

    void checkDependency() { 
     dependency.check(); 
    } 
} 

@Component 
public interface ClientComponent { 
    void inject(Client client); 
} 

public class Test { 
    public static void main(String... args) { 
     Client client = new Client(); 
     client.checkDependency(); 
    } 
} 

Он отлично работает, но теперь я хочу, чтобы моя одноплодную зависимость. Как я могу это достичь? Должен ли я создавать модуль для этой зависимости и аннотировать метод предоставления с помощью аннотации singleton или у меня есть другие варианты, чтобы избежать создания модуля?

+0

Вы попробовали мое решение? –

ответ

5

Добавьте @Singleton в начало своего класса и добавьте аннотацию @Singleton к вашему компоненту.

@Singleton 
public class Dependency { 

    @Inject 
    Dependency() { 
    } 

    void check() { 
     System.out.print("Instantiated"); 
    } 
} 

@Singleton 
@Component 
public interface ClientComponent { 
    void inject(Client client); 
} 

Вы также должны переместить создание своего компонента для лучшего места - метод onCreate из объекта приложения - это правильное место.

+0

Он работает, спасибо! Согласитесь, инъекция внутри конструктора - плохая идея, я сделал это, чтобы уменьшить количество кода. –

+0

Я рад, что смогу помочь вам удачи;) –

Смежные вопросы