Dagger 2 - Singleton类创建了两次

时间:2015-11-25 12:36:07

标签: android dagger-2

我有其他2个类依赖的单例类:另一个单例和服务。问题在于,在实践中,每个人都会收到一个应该是单身人士的不同实例。我试图找出原因。以下是它的要点:

单例依赖类:

@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

结论作为答案发布。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

对于那些具有相同问题的人,导致多次创建单例的另一个原因是@Singleton仅由@Component强制执行。如果单例被另一个@Component(或同一组件的另一个实例)调用,它将被重新创建。