在 Dagger 中注入一个需要创建 activity 的对象

Inject in Dagger an object with needs activity to be created

大家好!

请帮我弄清楚我需要应对的场景是否符合 Dagger 的概念。

我必须将 class 注入到我的 Activity 中,这需要创建此 activity。我想到的唯一方法是将 activity 添加到模型并在对象 Provides 方法中使用它。听起来像不是正常的使用场景。

@Module
public class SampleDiModule {
  private Activity activity;

  public SampleDiModule(Activity activity){
     this.activity = activity;
  }

  @Provides
  @ModuleScope
  public InjectedObject provideInjectedObject(){
     return new InjectedObject.createForAcivity(activity)
  }
}

我打算注入一个 activity 展示者,展示者依赖于一个对象,该对象只能通过以下方式由对象工厂创建

public MyPresentor(InjectedObject object){
}


InjectedObject object = InjectedObjectFactory.forActivity(this)

谢谢

好的,有多种方法可以实现。

其中两个在我脑海中浮现。

首先,使用 Dagger 作用域。您可以创建 @Activity 范围,该范围将管理具有特定活动生命周期的对象。创建作用域为 Activity 的 dagger 模块时,您可以传递一个 activity 引用作为构造函数参数,然后使用它。像这样(伪代码):

class ActivityScopedModule {

   ActivityScopedModule(Activity: activity) {
       this.activity = activity;
   }

   CustomObject provideCustomObject() {
       return new CustomObject(this.activity);
   }

}

重要的是,作用域为 activity 的模块必须从 Activity.onCreate() 实例化在这里您可以找到有关创建匕首作用域的更多信息:http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/ Or in this three-part series: https://android.jlelse.eu/dagger-2-part-i-basic-principles-graph-dependencies-scopes-3dfd032ccd82

另一种更简单的方法是,不使用静态 InjectedObjectFactory.forActivity(this),将其设为 non-static class InjectedObjectFactory,使其成为实例dagger 模块为 new InjectedObjectFactory(),然后从 activity 调用 myInjectedObjectFactory.forActivity(this) 并将其传递给演示者。