问题描述
我的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 (将#修改为@)