1

我是依赖注入的初学者。特别是 Dagger 2。我试图弄清楚我是否/如何做这样的事情:

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

还是我需要将该依赖项作为类变量放入?对此的任何帮助将不胜感激。同样在这种情况下,变量 someInteger 不是依赖项,而是由调用者添加......这有关系吗?

我可以这样称呼它吗:

this.someMethodName(5); 

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

4

2 回答 2

1

你可以使用一些界面

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

现在在你的课堂上实现

public myClass implements MyDependence{
   @Override
   int myFunction(int value){
       // do something
   }
}
于 2015-05-12T00:12:29.897 回答
1
  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 的意思是,该模块可以在我们的 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

您还可以创建作用域依赖项,其生命周期取决于注入位置的生命周期,例如活动或片段

希望我给了你 Dagger 是什么的基本概念。

于 2015-05-12T00:58:42.953 回答