Articles of dagger 2

为生成MembersInjector。 更喜欢在该类上运行匕首处理器

我有这些警告,我不明白他们的意思。 有人能指点我吗? 对于我注入的类(其中有一个component.inject(this)语句) Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead. 对于我正在注入的对象(使用@Inject注释的@Inject ) Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead.

使用KClasstypes绑定到映射

我试图通过他们的KClasstypes将ViewModel子类绑定到一个映射中: @Module abstract class ViewModelModule { @Binds @IntoMap @ViewModelKey(MyViewModel::class) abstract fun bindsMyViewModel(viewModel: MyViewModel): ViewModel @Binds abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory } 但我得到Dagger编译错误: e: ~/Example/app/build/tmp/kapt3/stubs/debug/com/example/app/injection/AppComponent.java:5: error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<kotlin.reflect.KClass,? extends javax.inject.Provider> cannot be provided without an @Provides-annotated method. e: e: public abstract interface AppComponent { e: ^ e: java.util.Map<kotlin.reflect.KClass,? extends javax.inject.Provider> is injected at e: com.example.app.ui.ViewModelFactory.(creators) e: […]

使用Dagger的应用程序组件构建Android Instant App

我目前正在尝试使用InstantApps,并希望将dagger包含在我的项目中。 我在设置应用程序AppComponent时遇到了问题。 我的应用程序组件包括我的应用程序的所有function匕首模块。 我基本上有: 包含我的Application类的One Base应用程序模块 每个Activity都有一个匕首模块的多个function ,所有function都以Base作为依赖项。 一个应用程序模块和即时模块都导入所有function和基本应用程序模块。 我想在添加Instant App模块之前弄清楚设置。 来自InstantApps文档和项目示例。 似乎Application类需要在Base中。 从Dagger文档,到设置匕首: DaggerYourAppComponent.create().inject(this); 应该包含在您的应用程序类中。 但是,这似乎是不可能的,因为AppComponent需要引用所有function匕首模块。 我的问题是: 我应该在哪里添加我的AppComponent匕首模块? 我应该将我的应用程序保存在app模块中而不是Base中吗? 有关Dagger和Instant Apps的任何GitHub回购或文档? 谢谢

这是在unit testing中使用Dagger 2 for Android app的正确方法来覆盖与模拟/假货的依赖关系吗?

对于’常规’Java项目来说,使用模拟/伪造的方法覆盖unit testing中的依赖项很容易。 您只需构建Dagger组件并将其提供给驱动应用程序的“主”类。 对于Android而言,事情并不那么简单 ,我已经搜索了很长时间才能find合适的例子,但是我无法find,所以我不得不创建自己的实现,我真的很感激反馈,这是使用Dagger 2或者那里的正确方法是一种更简单/更优雅的方式来覆盖依赖项。 这里的解释( 项目源可以在github上find ): 鉴于我们有一个简单的应用程序使用Dagger 2与单个模块的单个匕首组件我们想要创建使用JUnit4, Mockito和Espresso的 androidunit testing: 在MyApp Application类中,组件/注入器初始化如下: public class MyApp extends Application { private MyDaggerComponent mInjector; public void onCreate() { super.onCreate(); initInjector(); } protected void initInjector() { mInjector = DaggerMyDaggerComponent.builder().httpModule(new HttpModule(new OkHttpClient())).build(); onInjectorInitialized(mInjector); } private void onInjectorInitialized(MyDaggerComponent inj) { inj.inject(this); } public void externalInjectorInitialization(MyDaggerComponent injector) { […]

找不到Dagger 2的符号类“Generated”

我刚开始使用Dagger 2进行dependency injection。 当我启动我的modules , components并尝试构建我的应用程序时, gradle抛出了错误 Error:(4, 24) error: cannot find symbol class Generated 我挖了它,发现错误发生在Dagger生成DI一个类中。 缺少的特定类是javax.annotation.Generated ,抛出错误的行是将Dagger生成的类转换为@Generated(“dagger.internal.codegen.ComponentProcessor”) 这个问题通过在我的gradle构建文件中添加行compile ‘org.glassfish:javax.annotation:10.0-b28’来帮助find将javax包作为依赖项添加的解决方案。 这导致了成功的构建。 我的问题是,为什么这不是作为Dagger的传递依赖添加的,或者为什么没有其他人遇到这个特定的问题(我假设如此,因为我在这里找不到任何问题?

Javadependency injection:Dagger 1 vs Dagger 2,哪个更好?

Dagger 2比Dagger 1有什么优势? 到目前为止,我发现(只)2: Dagger 2允许您使用代码混淆与proguard Dagger 2速度更快(在将它用于Android应用程序时没有多大优势,但如果你将它用于某种服务器,这肯定是一件很重要的事情) 与此同时,我发现了一个很大的缺点:你不能在Dagger 2中使用模块覆盖( @Module(overrides = true) ),这至少对我来说很烦人 – 它对于unit testing非常有用。 还有其他优点/缺点吗?

如果没有@Inject构造函数或@ Provide-annotated方法,则无法提供

我正在使用Android Dagger2,但我收到以下错误。 我的AppModule类是: @Module public class AppModule { @Provides public DownloadFilePresenterImp provideDownloadfilePresenterImp(DownloadFileView downloadFileView) { return new DownloadFilePresenterImp(downloadFileView); } } 我的AppComponent接口是: @Singleton @Component(modules = AppModule.class) public interface AppComponent { void inject(DownloadFileView target); } 我的DaggerInject类 public class DaggerInjector { private static AppComponent mAppComponent = DaggerAppComponent .builder() .appModule(new AppModule()) .build(); public static AppComponent getAppComponent() { return mAppComponent; } […]

Dagger2不生成“Dagger_”文件

我一段时间使用匕首2,但今天尝试编译得到了这个错误: 错误:(13,31)错误:找不到符号类Dagger_GlobalComponent 错误:(38,21)错误:找不到符号variablesDagger_GlobalComponent 所以这是代码: public class MyAppApplication extends Application { private static GlobalComponent component; @Override public void onCreate() { super.onCreate(); component = Dagger_GlobalComponent.builder() .busModule(new BusModule()) .syncModule(new SyncModule()) .serviceModule(new ServiceModule()) .contextModule(new ContextModule(this)) .persistenceModule(new PersistenceModule(this)) .build(); }} 和gradle依赖: … compile ‘com.google.dagger:dagger:2.0-SNAPSHOT’ apt ‘com.google.dagger:dagger-compiler:2.0-SNAPSHOT’ provided ‘org.glassfish:javax.annotation:10.0-b28’ … 有解决方案? 已经尝试过:清理,重建,更改依赖版本,还删除Gradle缓存并重新安装Android Studio。 如果它有助于此示例项目也出现相同的错误: https://github.com/gk5885/dagger-android-sample https://github.com/mgrzechocinski/dagger2-example

Dagger 2 – 为什么这是一个依赖循环?

我正在尝试将应用程序的Context注入其他两个对象,即AuthManager和ApiClient 。 它们都取决于所述上下文, ApiClient依赖于AuthManager 。 为什么这是一个依赖循环,如果Context没有引用其他2? 这可以解决吗? 编辑:这是一些代码 @Module public class AppModule { private final Application application; public AppModule(Application application) { this.application = application; } @Provides @Singleton Context provideApplicationContext() { return this.application; } } @Module public class NetworkModule { @Provides @Singleton public AuthManager providesAuthManager(AuthManager manager) { return manager; } @Provides @Singleton public ApiClient providesApiClient(ApiClientFactory factory) […]

Dagger 2和android Studio:工作但看不到生成的类

我正在尝试在Android Studio项目中使用Dagger 2。 我用过CoffeeMaker的例子。 我设法使应用程序构建和工作: – 我没有成功看到生成的代码。 – 如果我调试,我也看不到它。 – 此外DaggerCoffeeApp_Coffee标记为芦苇(无法解析符号) 我的gradle文件是: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:1.1.3’ // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } […]