如何在方法中注入依赖项?

时间:2015-05-11 23:59:33

标签: android dagger-2

我是依赖注入的初学者..特别是Dagger 2.我试图弄清楚我是否可以做这样的事情:

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

或者我是否需要将该依赖项作为类var?任何有关这方面的帮助将不胜感激。同样在这种情况下,变量some​​Integer不是依赖项,而是由调用者添加...这有关系吗?

我可以这样称呼它:

this.someMethodName(5); 

android studio不喜欢上面的调用方法(我假设是因为我做错了)

2 个答案:

答案 0 :(得分:1)

您可以使用某些界面

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

现在实施你的课程

public myClass implements MyDependence{
   @Override
   int myFunction(int value){
       // do something
   }
}

答案 1 :(得分:1)

  1. 您需要创建由@Component注释的组件。
  2. 组件接受提供依赖关系的模块。
  3. 您创建的每个组件的名称都以Dagger前缀开头,例如对于MyComponent。
  4. 让我们看看下面的例子:

        @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说的是模块可以在我们的Component指定的注入位置提供所需的依赖关系。

     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, FactoryLazy实例。 http://google.github.io/dagger/api/latest/dagger/Component.html

    您还可以创建作用域的依赖关系,其生命周期取决于注入位置的生命周期,例如Activities or Fragments

    希望我能告诉你Dagger的基本概念。