【发布时间】:2016-04-01 07:16:05
【问题描述】:
首先,我是新手,刚开始探索匕首,理解上有些问题,希望有人能帮帮我。
我已经阅读了很多关于匕首的内容,但仍然无法弄清楚某些部分。
我创建了我的ApplicationComponent,它看起来像这样
@Singleton
@Component(modules = {
ApplicationModule.class,
ThreadingModule.class,
NetworkModule.class,
DatabaseModule.class,
ServiceModule.class,
ParseModule.class,
PreferencesSessionModule.class})
public interface ApplicationComponent {
void inject(BaseActivity baseActivity);
void inject(MainAppActivity mainAppActivity);
void inject(BaseFragment baseFragment);
}
而且一切都可以正确注入,但现在我想更深入地研究 dagger API 并使用 Custom Scope
我有一个名为 PermissionModule 的模块,它用于 Android M 版本。
@PerActivity
@Module
public class PermissionModule {
@Provides
@PerActivity
PermissionController providePermissionController(Activity activity) {
return new PermissionManager(activity);
}
}
我希望它被注入到我的活动中,并且只有当活动也在内存中时才在内存中(活动生命周期)
@PerActivity
@Component(modules = {
ActivityModule.class,
PermissionModule.class
})
public interface ActivityComponent {
Activity activity();
void inject(BaseActivity baseActivity);
PermissionModule permissionModule();
}
我的ActivityComponent
@PerActivity
@Component(modules = {
ActivityModule.class,
PermissionModule.class
})
public interface ActivityComponent {
Activity activity();
void inject(BaseActivity baseActivity);
PermissionModule permissionModule();
}
还有我的BaseActivity
public abstract class BaseActivity extends AppCompatActivity implements SpiceManagerProvider, NetworkRequestsExecutor {
// Dependencies are injected by ApplicationComponent
@Inject
protected ApplicationSettingsManager mApplicationSettingsManager;
@Inject
protected SpiceManager mSpiceManager;
@Inject
protected ScheduledThreadPoolExecutor mPoolExecutor;
!!!!!!
Should be injected by activity component
@Inject
protected PermissionController mPermissionController;
在onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
// Injecting dependencies
MyApplication application = MyApplication.get(this);
application.getApplicationComponent().inject(this);
DaggerActivityComponent.builder().activityModule(new ActivityModule(this)).build().inject(this);
mPermissionController.requestPermission(Manifest.permission.ACCESS_FINE_LOCATION);
mPermissionController.requestPermission(Manifest.permission.CAMERA);
super.onCreate(savedInstanceState);
}
我收到了错误
没有@Provides- 或不能提供PermissionController @Produces-注解的方法。 .ui.activities.base.BaseActivity.mPermissionController
我的代码有什么问题?
也不要创建新问题,它与这个主题有关。
dagger2如何解析Scope注解,我想不通。据我了解,匕首只识别Singleton 注释,所有其他注释不会影响匕首决定,因为所有其他注释都将具有活动范围?
【问题讨论】:
标签: android dependency-injection scope dagger dagger-2