相关疑难解决方法(0)

如何在Android项目中从头开始设置DAGGER依赖注入?

如何使用Dagger?如何配置Dagger在我的Android项目中工作?

我想在我的Android项目中使用Dagger,但我发现它令人困惑.

编辑:Dagger2也从2015年04月15日开始,它更令人困惑!

[这个问题是一个"存根",我在我的答案中添加了更多关于Dagger1的知识,并且更多地了解了Dagger2.这个问题更多的是指导而不是"问题".

android dependency-injection dagger dagger-2

96
推荐指数
2
解决办法
2万
查看次数

使用dagger2进行依赖注入时,我可以注入超类吗?

我在我的android应用程序中使用Dagger2 for DI.我发现我必须为每个使用@Inject字段的类编写inject方法.有没有办法我可以注入父类,这样我就不必在每个子类上调用注入?以活动为例.我有一个BaseActivity每个活动都延伸出来的.有没有办法可以在组件中为BaseActivity创建一个注入方法,只需在BaseActivity的onCreate中调用注入,子活动中的@inject字段会自动注入?

java android dependency-injection dagger dagger-2

44
推荐指数
2
解决办法
2万
查看次数

使用Dagger 2在库模块中注入应用程序上下文

我正在构建一个具有一些功能的应用程序:ContentProvider,SyncAdapter,作业服务和相关的持久性逻辑.除此之外,还有UI的活动.我试图将所有所述功能放在一个单独的库模块中,因为从理论上讲它们的逻辑是独立的,可以被任何应用程序重用.

现在来了Dagger2.我的库的依赖图的第一个节点(主要组件)确实需要提供Context,并且必须从Application注入此Context,因为库范围与应用程序具有相同的生命周期.显然,要自包含,我的库不应该直接使用我的Application类.

这些是我想到的可能性:

  • 在我的应用程序中构建库的主要组件并将其存储在这里建议的全局静态类/枚举中,但我担心使用这样的静态引用可能是反模式.
  • 在库中打包一个Application类,它构建库范围的Component,将应用程序上下文转换为库中的此类以使用该组件,然后在主应用程序上扩展此Application类.这样可行,但如果有多个库则不再可行.
  • 使用工厂模式:在库组件中提供提供方法,提供工厂,然后将工厂提供本地可用的上下文作为参数.(至于解释这里).这似乎是可行的,但它增加了额外的复杂性.
  • 最后但并非最不重要的是,放弃尝试模块化组件,因为依赖于应用程序上下文打破了模块化的概念.

这样做的正确方法是什么?

android dependency-injection android-library dagger-2

6
推荐指数
1
解决办法
2383
查看次数

是否可以在图书馆项目中使用Dagger?

我有一个工作和图书馆项目.Dagger用于工作项目,几天前我决定在图书馆项目中使用Dagger.我为库项目配置了Eclipse Java Compiler和Annotation Processing设置,添加了必需的Dagger和JavaWriter JAR,在库项目中对模块进行了decalred.现在这两个项目都没有任何错误.

但是当我尝试在Android设备上运行应用程序时,它崩溃了:

java.lang.RuntimeException:
Unable to create application com.iqm.smartapp.AlarmsApplication:
java.lang.IllegalStateException:
Module adapter for class com.iqm.library.IQMLibraryModule could not be loaded.
Please ensure that code generation was run for this module.
Run Code Online (Sandbox Code Playgroud)

我认为这是因为在库项目中.apt_generated文件夹是空的!Dagger不会为库项目生成类.可能有一些IDE /项目配置错误.但是在工作和库项目中完全配置并且没有更多的想法,可能是错的.

所以我的问题是:是否有可能在Android库项目中使用Dagger?什么应该是正确的Eclipse配置启用需要代码生成?

提前致谢.

编辑:我创建了一个新的干净库项目,为Dagger设置并复制旧文件中的所有源文件.此时,新项目中的所有项目都按预期工作.奇怪的事情!

android dagger

5
推荐指数
1
解决办法
1487
查看次数

用Dagger将依赖注入Singleton?

是否有可能让Dagger为你注射单身人士?

事实上,我只找到了一种手动为单身人士提供依赖关系的方法:

@Provides
@Singleton
public Dispatcher providesDispatcher(Context context, PPreferences preferences,
                                                       FileNameCache fileNameCache) {
    return new Dispatcher(context, preferences, fileNameCache);
}
Run Code Online (Sandbox Code Playgroud)

这是定义单身人士的唯一方法吗?我更喜欢做的是以下内容,以便Dagger自己注入依赖项,但这样做会给我一个错误.

@Provides
@Singleton
public Dispatcher providesDispatcher(Dispatcher dispacher) {
    return dispacher;
}
Run Code Online (Sandbox Code Playgroud)

也许还有另一种方法来定义单身,这将允许我注入其他单身人士吗?

任何帮助表示赞赏.

编辑: 我刚刚意识到我正在使用另一个Singleton进行第二种方法,但是当我将实现映射到接口时,情况略有不同:

@Provides
@Singleton
public Tracker providesTracker(TrackerImpl tracker) {
    return tracker;
}
Run Code Online (Sandbox Code Playgroud)

TrackerImpl也注入了上面提到的PPreferences的实例.

当我尝试使用第二个示例创建Dispatcher时,这是我得到的错误:

error: Unknown error java.lang.IllegalStateException thrown by javac in graph validation: Dependency cycle:
0. com.example.test.Dispatcher bound by @Singleton/ProviderMethodBinding[provideKey="com.example.test.Dispatcher", memberskey="null"]
0. com.example.test.Dispatcher
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger

3
推荐指数
1
解决办法
4628
查看次数