Android 基本匕首2活性注射

Android 基本匕首2活性注射,android,dagger-2,Android,Dagger 2,我正在学习匕首2教程: 一切正常,但我想创建一个模块,根据需要在构造函数中获取一个活动(或者稍后可能是一个片段)。所以它看起来像: @Module public class AndroidModule { private final AppCompatActivity activity; public AndroidModule(AppCompatActivity act) { this.activity = act; } @Provides

我正在学习匕首2教程:

一切正常,但我想创建一个模块,根据需要在构造函数中获取一个活动(或者稍后可能是一个片段)。所以它看起来像:

@Module
public class AndroidModule {
    private final AppCompatActivity activity;

    public AndroidModule(AppCompatActivity act) {
        this.activity = act;
    }

    @Provides @Singleton StringFactory provideStringFactory() {
        return new StringFactory(activity);
    }
}
但据我所知,这意味着我不能再从应用程序类创建我的组件,我必须将以下代码移动到活动中(并更改组件名称等):

所以我的问题是,还有别的方法吗?因为对于测试,我不知道如何为该活动提供不同的组件,因为创建就在其中。在这种情况下,我不明白为什么这比直接在那里构建对象更好。不过,我肯定我错过了一些东西

我试过了

@Module
public class AndroidModule {

    @Provides StringFactory provideStringFactory(Activity activity) {
        return new StringFactory(activity);
    }
}
但这提供了如下错误:

Error:(12, 14) error: android.support.v7.app.AppCompatActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
com.ecgreb.dagger2testingdemo.MainActivity.stringFactory
[injected field of type: com.ecgreb.dagger2testingdemo.StringFactory stringFactory]
com.ecgreb.dagger2testingdemo.AndroidModule.provideStringFactory(android.support.v7.app.AppCompatActivity activity)
[parameter: android.support.v7.app.AppCompatActivity activity]

您必须使用多个组件。您可能应该看看更多的教程、组件依赖项和子组件。例如,检查这个项目:您将不得不使用多个组件。您可能应该看看更多的教程、组件依赖项和子组件。然后是更详细的范围。例如,请查看此项目:
Error:(12, 14) error: android.support.v7.app.AppCompatActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
com.ecgreb.dagger2testingdemo.MainActivity.stringFactory
[injected field of type: com.ecgreb.dagger2testingdemo.StringFactory stringFactory]
com.ecgreb.dagger2testingdemo.AndroidModule.provideStringFactory(android.support.v7.app.AppCompatActivity activity)
[parameter: android.support.v7.app.AppCompatActivity activity]