草庐IT

android - Dagger 2 for Android 不是 DI 框架,而是美化了的 Service Locator 吗?

例如,假设我使用Retrofit创建的Rest适配器位于Application类中。我很想在Activity中获取它,所以我编写了以下代码:publicclassMainActivityextendsActivity{@InjectMyRestAdaptermRestAdapter;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);((GlobalApplication)getApplication()).getComponent().inject(this)

java - 适用于 Android 的 Dagger : Injecting an Activity to the object graph after calling setContentView

我想在Android上使用Dagger将Activity的实例注入(inject)到另一个类中,如下所示:classPresentationLayer{ActivitymActivity;@InjectpublicPresentationLayer(Activityactivity){this.mActivity=activity;}publicvoidpresentData(Useruser){((TextView)mActivity.findViewById(R.id.username)).setText(user.getName());//...//...}}我能够进行注入(in

带有 Dagger 2 的 Android MVP - 具有多个 fragment 的 Activity

我一直在查看使用Dagger2的MVP的GoogleAndroid架构示例:https://github.com/googlesamples/android-architecture/blob/todo-mvp-dagger/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/tasks/TasksActivity.java但是,这个例子相当简单——每个Activity只有一个Fragment,Dagger组件构建在Activity中,并用于将Activity与Presenter注入

带有 Dagger 2 的 Android 普通 Junit

我曾经在MVP工作,我通常使用普通的Junit(不是Instrumentation!)测试我的Presenter,因为Presenter只有业务逻辑,没有任何对Android内部的引用。现在切换到Dagger2后,我了解到我在为我的应用程序组件设置“TestModule”时遇到了问题。在测试类中创建组件将不起作用(可能是因为“apt”没有在那里运行)未找到任何将Dagger与标准Junit测试结合使用的示例。我发现的每个示例都只依赖于Instrumentation测试或Roboelectric(基本上模拟Activity和其他Android相关的东西),但这对我来说只是一个UI测试,我

java - Dagger 2 : Cannot be provided without an @Provides-annotated method

我刚开始学习dagger2,遇到了一个奇怪的问题,在我看来像是一个错误。这是模块:@ModulepublicclassSimpleModule{@ProvidesCookerproviderCooker(){returnnewCooker("tom","natie");}}组件:@Component(modules=SimpleModule.class)publicinterfaceSimpleComponent{voidinject(DaggerTestActivityactivity);}接口(interface):publicinterfaceCoffeeMaker{String

android - 在 Robolectric 测试中覆盖 Dagger 模块

我正在开发一个Android应用程序,我一直在使用Dagger进行依赖注入(inject)。我现在正在尝试测试具有这些依赖项之一的fragment,我们称它为ProductsService。在我的Robolectric测试中,我有一个覆盖ProductsService的测试模块:@Module(includes=ProductsModule.class,injects={Fragment.class,FragmentTest.class},overrides=true)staticclassMockProductsModule{@Provides@SingletonpublicProd

java - Dagger 2 "Dagger"前缀组件无法编译?自动生成类

我正在尝试在Android上使用Dagger2。我以前让它工作,我有一个appModule将依赖项注入(inject)应用程序中的特定类。我的问题是我收到错误Error:(14,55)error:cannotfindsymbolclassDaggerAppComponent正在尝试导入。这是一个自动生成的类下面是我的build.gradle文件中我的Dagger特定依赖项compile'com.google.dagger:dagger-compiler:2.0.2'compile'com.google.dagger:dagger:2.0.2'provided'javax.annotat

android - Dagger2 - 如何在运行时有条件地选择模块

我有一个大型Android应用程序,需要根据操作系统版本、制造商和许多其他内容运行不同的代码。但是,此应用程序需要是单个APK。它需要在运行时足够聪明才能确定要使用的代码。到目前为止,我们一直在使用Guice,但性能问题导致我们考虑迁移到Dagger。但是,我一直无法确定我们是否可以实现相同的用例。主要目标是让我们在启动时运行一些代码以提供兼容模块的列表。然后将此列表传递给Dagger以连接所有内容。这是我们要迁移的Guice当前实现的一些伪代码importcom.google.inject.AbstractModule;@Feature("Wifi")publicclassWifiD

android - Dagger 2 : Error when two components has same inject method signature

我有这个组件:@Singleton@Component(modules=OauthModule.class)publicinterfaceOauthComponent{voidinject(LoginActivitya);}和模块:@ModulepublicclassOauthModule{@Provides@SingletonOauth2ServiceprovideOauth2Service(){returnnewOauth2StaticService();}}这是另一个组件:@Singleton@Component(modules=LoggedUserModule.class)pu

android - Dagger 在模块上找不到可注入(inject)成员

我正在使用Dagger用于在Android项目中进行依赖注入(inject),并且可以很好地编译和构建应用程序。对象图看起来是正确的并且可以工作,但是当我添加dagger-compiler作为依赖项以在编译时出错时,它会报告一些奇怪的错误:[ERROR]error:Nobindingforcom.squareup.tape.TaskQueuerequiredbycom.atami\.mgodroid.ui.NodeIndexListFragmentforcom.atami.mgodroid\.modules.OttoModule[ERROR]error:Nobindingforcom.