Dagger2:如何在不注入合成器类的情况下注入字段? 选项1:只需将@Inject添加到构造函数中选项2:注入MembersInjector<B> 选项3:在MembersInjector方法中使用@Provides

问题描述

我的A类需要C类的依赖注入。 C类是B类的组成部分(B具有C作为字段)。 A类可以在不注入B的情况下注入C吗?

[A注入]->(B未注入A)-> [C注入B]

我是我的真实项目,我需要将字段注入一个类,但是不需要将注入队列添加到包含(直接或间接)此字段的所有类中。

目前我在B类中有例外:

Exception in thread "main" java.lang.NullPointerException
        at B.log(B.java:28)
        at A.b_foo(A.java:28)
        at App.main(App.java:36)

请咨询。 代码:

App.java

import dagger.Component;
import javax.inject.Singleton;
 
public class App {
  @Singleton
  @Component(
      modules = {
              CModule.class
             }
  )
  public interface AppRunner {
    A instance();
  }

  public static void main(String[] args) {
    AppRunner appRunner = DaggerApp_AppRunner.builder().build();
    appRunner.instance().foo();
  }
}

A.java

import javax.inject.Inject;

public class A {
    private final B b;

    @Inject
    A() {
        this.b = new B();
    }

    public void foo() {
        b.log();
    }
}

B.java

import javax.inject.Inject;

public class B {

  @Inject
  C c;

  B() { }

  public void log() {
      c.log("in C log"); //java.lang.NullPointerException here because B was not injected before C
  }
}

C.java

import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;

@Singleton
public final class C {
  private final List<String> logs = new ArrayList<>();

  @Inject
  C() {}

  public void log(String msg) {
    logs.add(msg);
  }
}

CModule.java

import dagger.Module;
import dagger.Provides;

@Module
public abstract class CModule {
    @Provides
  static C provideC() {
        return new C();
    }
}

更新:我完全可以使用完全没有注入B的代码吗?我的A班人知道Dagger。但是A一定不能注射B。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)