2017-11-10 133 views
0

我正在使用Dagger Android 2.13,并且正在设置活动范围的依赖关系。匕首2.13:构造函数注入类的控制范围

我明白了如何为模块内声明的依赖性指定范围:

@Module 
public class MyActivityModule { 
    @Provides 
    @PerActivity 
    MyActivityDataRepo provideMyActivityDataRepo() { 
     return MyActivityDataRepo(); // simplified for the sake of clarity 
    } 
} 

但我怎么会指定通过构造注射加入到依赖图形类的范围,如下面?

class MyActivityOtherDataRepo { 

    @Inject 
    MyActivityOtherDataRepo() { 
    } 
} 

有没有什么办法让作用域为MyActivity此类活动?

或者一旦它通过成员注入被注入到MyActivity中,它会被有效执行作用域?如果是这样,是否有方法将范围限制在MyActivity?我所能想到的是将MyActivityOtherDataRepo包私人化,并将其放在与MyActivity相同的包中。

回答

1

您可以范围由元件:

  • 注解@Provides@Binds注解的方法与范围

    @Provides 
    @PerActivity 
    MyActivityDataRepo provideMyActivityDataRepo() { /*...*/} 
    
  • 或添加范围注释类本身具有构造注射

    @PerActivity class MyActivityOtherDataRepo { 
        @Inject 
        MyActivityOtherDataRepo() { /*...*/} 
    } 
    

将这个范围的作用域,所以内@PerActivity任何部件,以及任何子将能够提供什么@PerActivity作用域。

您的类(public/package private)的可见性不直接影响此范围,但当然您无法将该类导入到应用程序的其他部分。

+1

那么你总是可以不使用构造函数注入,只从模块中的方法提供它,然后只将这个模块包含在你想要使用它的单个组件中。尽管我没有看到任何好处,但你会引入更多不必要的复杂性。 –