2015-05-11 4 views
1

Я новичок в зависимости инъекций .. специально Dagger 2. Я пытаюсь выяснить, если/как я могу сделать что-то вроде этого:Как я могу ввести зависимость в метод?

@Inject 
public void someMethodName(int someInteger, SomeObject dependency){ 
// do something with the dependency. 
} 

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

я могу назвать это так:

this.someMethodName(5); 

андроид студия не нравится вышеупомянутый метод вызова (я предполагаю, потому что я делаю что-то неправильно)

ответ

2
  1. Вам нужно создать компонент, который аннотированный по @Component.
  2. Компонент принимает модуль, который обеспечивает зависимости.
  3. Имя каждого компонента, которое вы создаете, начинается с префикса Dagger, например. для MyComponent.

Давайте посмотрим на следующем примере:

@Singleton 
    @Component(modules = DemoApplicationModule.class) 
    public interface ApplicationComponent { 
     void inject(DemoApplication application); 
    } 

Мы создали ApplicationComponent с одним методом впрыска. Мы говорим, что мы хотим внедрить определенные зависимости в DemoApplication.

Кроме того, в аннотациях @Component мы указываем модуль с методами обеспечения.

Это как наш модуль выглядит следующим образом:

@Module 
public class DemoApplicationModule { 
    private final Application application; 

    public DemoApplicationModule(Application application) { 
     this.application = application; 
    } 

    @Provides @Singleton SomeIntegerHandler provideIntegerHandler() { 
     return new MySomeIntegerHandlerImpl(); 
    } 
} 

Что мы говорим, создавая DemoApplicationModule является то, что модуль может обеспечить желательные зависимости в месте инъекции, указанном в нашей компоненте.

public class DemoApplication extends Application { 
    private ApplicationComponent applicationComponent; 

    @Inject SomeIntegerHandler handler; 

    @Override public void onCreate() { 
    super.onCreate(); 
    applicationComponent = DaggerApplicationComponent.builder() 
     .demoApplicationModule(new DemoApplicationModule(this)) 
     .build(); 
    applicationComponent.inject(this); 
    handler.someMethodName(5); 
    } 
    } 

См. Документацию о том, какие виды зависимостей вы можете получить. Кроме того, чтобы получить только сырой экземпляр, вы можете получить экземпляр Provider, Factory или Lazy. http://google.github.io/dagger/api/latest/dagger/Component.html

Вы также можете создать контекстное dependencis, то жизненный цикл которых зависят от жизненного цикла нагнетательных мест, как Activities or Fragments.

Надеюсь, я дал вам общее представление о том, что такое Кинжал.

1

вы можете использовать некоторые ИНТЕРФЕЙС

public interface myDependence{ 
    int myFunction(int value); 
} 

СЕЙЧАС реализуемый YOU КЛАССА

public myClass implements MyDependence{ 
    @Override 
    int myFunction(int value){ 
     // do something 
    } 
} 
Смежные вопросы