gpt4 book ai didi

android - Dagger2多模块设计

转载 作者:行者123 更新时间:2023-11-30 02:13:14 25 4
gpt4 key购买 nike

对于 Dagger2发布,我计划将模块拆分成几个小模块,以便在其他项目中重复使用。

应用模块包含很多东西,我可以将其分为三种类型。A 型相关,B 型相关,C 型相关。

所以我想把它放在三个不同的模块中,因此如果需要的话它可以在其他项目中重复使用它的一部分。

引用自Google's Fork

应用程序的build.gradle

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()
}
}

应用模块的build.gradle

apply plugin: 'com.neenbedankt.android-apt'
//below lines go to dependenc
compile 'com.google.dagger:dagger:2.0'
apt 'com.google.dagger:dagger-compiler:2.0'
provided 'org.glassfish:javax.annotation:10.0-b28'

完成上述步骤后,我将创建我的应用程序模块

@dagger.Module
public class MyApplicationModule {
void inject(MyApplication application);
}

和我的组件

@Singleton
@Component(
modules = {TypeA.class, TypeB.class, TypeC.class})
public interface MyApplicationComponent {

当我在 Activity 中使用它时,它看起来像

@Component(dependencies = MyApplicationComponent.class,
modules = ActivityModule.class)
public interface ActivityComponent {

void injectActivity(SplashScreenActivity activity);

存在编译问题

Error:(22, 10) error: XXXXXX cannot be provided without an @Provides- or @Produces-annotated method. com.myapplication.mXXX [injected field of type: XXX]

我想当我配置 Activity 组件从应用程序组件扩展时有问题。

我的目的是应用程序组件中的一些单例对象, Activity 将注入(inject)相同的对象以减少每次在 Activity 上创建的一些对象。我的设计错了吗??或者任何其他需要为配置做的事情??

最佳答案

找出根本原因来自@Scope

需要暴露类型给其他子组件使用

@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}

如果我们想为应用程序公开上下文,

@Singleton
@Component(
{TypeA.class, TypeB.class, TypeC.class})
public interface MyApplicationComponent {

void inject(MyApplication application);

@ForApplication
Context appContext();

当我的子组件想要扩展它时

@ActivityScope
@Component(dependencies = MyApplicationComponent.class,
modules = ActivityModule.class)
public interface ActivityComponent extends MyApplicationComponent {

void injectActivity(Activity activity);

我觉得这对Dagger2来说是个好东西,让你手动暴露你需要使用的对象,代码变得更可追溯。

关于android - Dagger2多模块设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29816518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com