我实际上早些时候也问过类似的问题。我只是想问一个简单的方法。
我的ActivityBuilder是
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = {MainActivityModule.class, MainFragmentProvider.class})
abstract MainActivity contributeMainActivity();
}
我的MainActivity是
class MainActivity : DaggerAppCompatActivity() {
@Inject
lateinit var injectedString:String
}
我的片段是
class MainFragment : DaggerFragment() {
/*@Inject
lateinit var injectedString:String*/
}
我的ActivityModule是
@Module
public class MainActivityModule {
@Provides
static String provideDummyDependency() {
return "I love Dagger";
}
}
我的FragmentModule是
@Module
public class MainFragmentModule {
/*@Provides
static String provideDummyDependency() {
return "I love Dagger";
}*/
}
我的FragmentProvider是
@Module
public abstract class MainFragmentProvider {
@ContributesAndroidInjector(modules = MainFragmentModule.class)
abstract MainFragment provideMainFragmentFactory();
}
现在,我不能同时在活动和片段中插入字符串。一次可以工作。是否可以取消注释FragmentModule和Fragment中的代码,以便在activity和fragment中注入相同的类对象?
谢谢。
答案 0 :(得分:0)
您可以使用@Named注释注入相同的类类型,例如 因此,在您的情况下,
@Module
public class MainActivityModule {
@Provides @Named("activity")
static String provideActivityString() {
return "I love Dagger from Activity";
}
}
@Module
public class MainFragmentModule {
@Provides @Named("fragment")
static String provideFragmentString() {
return "I love Dagger from fragment";
}
}
以及注射时
您可以注入为
@Inject @Named("activity") String activityString;//Will be "I love Dagger from Activity"
@Inject @Named("fragment") String fragmentString;//Will be "I love Dagger from fragment"
您可以使用任何名称字符串,以上名称仅用于说明目的
翻阅https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2,请阅读它可以帮助您处理Dagger 2并了解更多内容
编辑: 您也可以使用@Named注释在单个模块中提供相同的类类型