Questions tagged «dagger-2»

Dagger 2是用于Java和Android的依赖项注入框架。它使用生成的代码实现完整的堆栈

4
Dagger 2子组件与组件依赖关系
Dagger 1的plus()方法是我在以前的应用程序中经常使用的方法,因此我了解到您可能希望拥有一个可以完全访问父图绑定的子组件的情况。 在什么情况下使用组件依赖关系而不是子组件依赖关系是有益的,为什么?
135 dagger  dagger-2 

1
什么决定了Dagger 2中组件(对象图)的生命周期?
我试图把头放在Dagger 2的范围内,特别是范围图的生命周期。如何创建离开示波器时将要清理的组件。 对于Android应用程序,通常使用Dagger 1.x在应用程序级别具有根作用域,并将其扩展以在活动级别创建子作用域。 public class MyActivity { private ObjectGraph mGraph; public void onCreate() { mGraph = ((MyApp) getApplicationContext()) .getObjectGraph() .plus(new ActivityModule()) .inject(this); } public void onDestroy() { mGraph = null; } } 只要您保留对子作用域的引用,该子作用域就一直存在,在这种情况下,这就是您的Activity的生命周期。将引用放在onDestroy中可确保范围图可以自由进行垃圾收集。 编辑 杰西·威尔逊(Jesse Wilson)最近发布了一个小窍门 Dagger 1.0严重破坏了其作用域名称... @Singleton批注用于根图和自定义图,因此要弄清楚事物的实际作用域是非常棘手的。 我已阅读/听到的所有其他内容都指向Dagger 2,以改善示波器的工作方式,但我仍在努力理解差异。根据下面的@Kirill Boyarshinov的评论,像往常一样,组件或依赖项的生命周期仍由具体引用来确定。那么Dagger 1.x和2.0范围之间的区别纯粹是语义上的清楚吗? 我的理解 匕首1.x 依赖关系是否@Singleton存在。根图和子图中的依赖项也同样如此,从而导致该依赖项绑定到哪个图上的模棱两可(请参阅Dagger中子图内的Singleton被缓存,或者在创建新的活动子图时总会重新创建它们)是建造的?) 匕首2.0 自定义范围允许您创建在语义上清晰的范围,但在功能上等同于@Singleton在Dagger 1.x中应用。 …
134 java  dagger-2  lifecycle 

22
错误:程序类型已存在:android.support.design.widget.CoordinatorLayout $ Behavior
构建项目时出现以下错误。在此项目中未使用CoordinatorLayout。刚刚作为依赖添加到build.gradle中: 我正在使用Android Studio 3.2 Canary 4。 LogCat AGPBI:{“种类”:“错误”,“文本”:“程序类型已存在:android.support.design.widget.CoordinatorLayout $ Behavior”,“源”:[{}],“工具”:“ D8” }:app:transformDexArchiveWithExternalLibsDexMergerForDebug失败失败:生成失败,发生异常。*出了什么问题:任务':app:transformDexArchiveWithExternalLibsDexMergerForDebug'的执行失败。 com.android.builder.dexing.DexArchiveMergerException:合并dex归档文件时出错:/windows/Other/app/build/intermediates/transforms/dexBuilder/debug/0.jar、/windows/Other/app/build/intermediates/transforms/ dexBuilder / debug / 1.jar,/ windows / Other / app / build / intermediates / transforms / dexBuilder / debug / 4.jar 、。。.......... / windows /其他/app/build/intermediates/transforms/dexBuilder/debug/294.jar 程序类型已经存在:android.support.design.widget.CoordinatorLayout $ Behavior build.gradle apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply …

2
如何在Android项目中从头开始设置DAGGER依赖项注入?
如何使用匕首?如何配置Dagger在我的Android项目中工作? 我想在我的Android项目中使用Dagger,但我感到困惑。 编辑:Dagger2也自2015年04月15日起退出市场,这更加令人困惑! [[这个问题是一个“存根”,随着我对Dagger1的了解更多,对Dagger2的了解,我正在添加这个答案。这个问题更多地是一个指南,而不是一个“问题”。]

13
如何在Android MVVM ViewModel中获取上下文
我正在尝试在android应用中实现MVVM模式。我已经读过ViewModels应该不包含任何android特定代码(以使测试更容易),但是我需要对各种事物使用上下文(从xml获取资源,初始化首选项等)。做这个的最好方式是什么?我看到AndroidViewModel有对应用程序上下文的引用,但是其中包含android特定的代码,因此我不确定是否应该在ViewModel中使用它。那些也与Activity生命周期事件相关联,但是我使用匕首来管理组件的范围,所以我不确定这将如何影响它。我是MVVM模式和Dagger的新手,所以感谢您的帮助!

5
匕首-我们是否应该为每个活动/片段创建每个组件和模块
我使用dagger2已经有一段时间了。而且我为每个活动/片段创建自己的组件/模块感到困惑。请帮我澄清一下: 例如,我们有一个应用程序,该应用程序有大约50个屏幕。我们将按照MVP模式和Dagger2 for DI来实现代码。假设我们有50个活动和50个演示者。 在我看来,通常我们应该这样组织代码: 创建一个AppComponent和AppModule,它们将提供在打开应用程序时将使用的所有对象。 @Module public class AppModule { private final MyApplicationClass application; public AppModule(MyApplicationClass application) { this.application = application; } @Provides @Singleton Context provideApplicationContext() { return this.application; } //... and many other providers } @Singleton @Component( modules = { AppModule.class } ) public interface AppComponent { Context …

5
不推荐使用Dagger 2.2组件构建器模块方法
我开始使用dagger 2.2,并且不赞成使用“组件”构建器中的模块方法。 这是我的应用程序组件: @Component(modules = ApplicationModule.class) public interface ApplicationComponent { void inject(Application application); } 和应用程序模块: @Module public class ApplicationModule { Application application; public ApplicationModule(Application application) { this.application = application; } @Provides @Singleton Application providesApplication() { return application; } } 这是生成的类: @Generated( value = "dagger.internal.codegen.ComponentProcessor", comments = "https://google.github.io/dagger" ) public final …
81 android  dagger-2 

8
匕首未为/ test类生成组件
我在这里遵循指南:https : //github.com/ecgreb/dagger-2-testing-demo 我的app / src / main中具有以下设置(省略了注入和@Provides代码): public class FlingyApplication extends Application { @Singleton @Component(modules = { FlingyModule.class }) public interface FlingyComponent } @Module public class FlingyModule 在app / src / test中: public class TestFlingyApplication extends Application { @Singleton @Component(modules = { TestFlingyModule.class }) public interface TestFlingyComponent extends FlingyComponent …
71 android  dagger-2 

2
如何使用Dagger 2在ViewPager中注入相同片段的ViewModel
我正在尝试将Dagger 2添加到我的项目中。我能够为片段注入ViewModels(AndroidX体系结构组件)。 我有一个ViewPager,它具有2个相同片段的实例(每个选项卡只有一个小的更改),并且在每个选项卡中,我正在观察一个LiveData以获取有关数据更改的更新(从API)。 问题在于,当api响应出现并更新时LiveData,当前可见片段中的相同数据将发送给所有选项卡中的观察者。(我认为这可能是因为的范围ViewModel)。 这就是我观察数据的方式: override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) activityViewModel.expenseList.observe(this, Observer { swipeToRefreshLayout.isRefreshing = false viewAdapter.setData(it) }) .... } 我正在使用此类提供ViewModel: class ViewModelProviderFactory @Inject constructor(creators: MutableMap<Class<out ViewModel?>?, Provider<ViewModel?>?>?) : ViewModelProvider.Factory { private val creators: MutableMap<Class<out ViewModel?>?, Provider<ViewModel?>?>? = creators override fun <T : ViewModel?> create(modelClass: Class<T>): T { var …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.