我如何向Dagger2注入不同的实例



,例如,请说下面。

  • 有一个名为MyAttivity的活动。
  • 有两个名为A,B和MyActivity具有这些类实例的类。
  • 有一个名为C的类,我想注入A&b。
  • C具有遵循活动生命周期的范围。

在这种情况下,无论范围如何

您需要使用预选赛。摘自《dagger用户指南的预选赛》部分:

有时单独的类型不足以识别依赖性。在 在这种情况下,我们添加了预选程序注释。

对于您的情况,仅C不足以识别您想要注入AB的两个不同依赖项。因此,您将添加一个预选赛以区分这两个实例。这是一个示例:

public class A {
    private final C c;
    @Inject
    public A(@Named("Instance 1") C c) {
        this.c = c;
    }
}
public class B {
    private final C c;
    @Inject 
    public B(@Named("Instance 2") C c) {
        this.c = c;
    }
}

模块:

@Module
public class CModule() {
    @Provides
    @Named("Instance 1")
    C provideInstance1OfC() {
        return new C();
    }
    @Provides
    @Named("Instance 2")
    C provideInstance2OfC() {
        return new C();
    }
}

组件:

@Component( modules = { CModule.class } )
public interface ActivityComponent {
    void inject(MyActivitiy activity);
}

最后:

public class MyActivity extends Activity {
    @Inject A a;
    @Inject B b;
    @Override
    void onCreate() {
         super.onCreate();
         DaggerActivityComponent.builder()
             .cModule(new CModule())
             .build()
             .inject(this);
    }
}

最新更新