Dagger 2 - Singleton class 创建了两次

Dagger 2 - Singleton class created twice

我有另外 2 个 class 依赖的单身人士 class:另一个单身人士和一项服务。问题是在实践中,他们每个人都会收到一个不同的实例,该实例应该是一个单身人士。我想弄清楚为什么。这是它的要点:

单例依赖class:

@Singleton
public class SingletonDependency {
    @Inject
    public SingletonDependency() {
        // ...
    }
}

另一个依赖它的单例:

@Singleton
public class DependentClass {
    @Inject
    public DependentClass(SingletonDependency singletonDependency) {
        // ...
    }
}

依赖的服务:

public class DependentService extends Service {
    @Inject SingletonDependency mSingletonDependency;

    @Override
    public void onCreate() {
        CoreInjector.INSTANCE.getCoreComponent().inject(this);
    }
}

我没有明确提供 SingletonDependency,因为它有一个 @Inject 构造函数,Dagger2 会为我处理它。这是根源吗?


编辑:

这是我的注射器:

public enum CoreInjector {

    INSTANCE;

    private CoreComponent mCoreComponent;

    public void init(Context context) { // called by the Application's onCreate()
        mCoreComponent = DaggerCoreComponent.builder()
                .coreModule(new CoreModule(context))
                .build();
    }

    public CoreComponent getCoreComponent() {
        return mCoreComponent;
    }
}

组件本身:

@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {

    void inject(DependentService dependentService);

}

模块本身没有明确提供依赖关系,但一旦我这样做,一切都会按预期工作 - 同一个实例。


编辑 2

结论作为答案发布。

我明白了。我的单例 class 实现了一个接口,这是我依赖的 classes 所依赖的——而不是实现。我猜 Dagger2 无法实现这一飞跃,即使该实现具有注入的构造函数。

模块中的显式 @Provides 方法是唯一的方法。

另一个可能导致多次创建单例的原因是@Singleton 仅由@Component 强制执行。如果一个单例被另一个@Component(或同一组件的另一个实例)调用,它将是re-created.