Android 使用匕首2在活动和片段中注入相同的类对象
我之前也问过类似的问题。我只是试着用一种简单的方式问 我的ActivityBuilder是Android 使用匕首2在活动和片段中注入相同的类对象,android,dagger-2,dagger,Android,Dagger 2,Dagger,我之前也问过类似的问题。我只是试着用一种简单的方式问 我的ActivityBuilder是 @Module public abstract class ActivityBuilder { @ContributesAndroidInjector(modules = {MainActivityModule.class, MainFragmentProvider.class}) abstract MainActivity contributeMainActivity(); } 我的主
@Module
public abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = {MainActivityModule.class, MainFragmentProvider.class})
abstract MainActivity contributeMainActivity();
}
我的主要活动是
class MainActivity : DaggerAppCompatActivity() {
@Inject
lateinit var injectedString:String
}
我的片段是
class MainFragment : DaggerFragment() {
/*@Inject
lateinit var injectedString:String*/
}
我的活动模块是
@Module
public class MainActivityModule {
@Provides
static String provideDummyDependency() {
return "I love Dagger";
}
}
@Module
public class MainFragmentModule {
/*@Provides
static String provideDummyDependency() {
return "I love Dagger";
}*/
}
我的模块是
@Module
public class MainActivityModule {
@Provides
static String provideDummyDependency() {
return "I love Dagger";
}
}
@Module
public class MainFragmentModule {
/*@Provides
static String provideDummyDependency() {
return "I love Dagger";
}*/
}
我的碎片提供者是
@Module
public abstract class MainFragmentProvider {
@ContributesAndroidInjector(modules = MainFragmentModule.class)
abstract MainFragment provideMainFragmentFactory();
}
现在,我不能同时在activity和fragment中注入字符串。它一次只能工作一个。是否可以取消对FragmentModule和Fragment中的代码的注释,以便在activity和Fragment中注入相同的类对象
谢谢。您可以使用@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"
您可以使用任何名称字符串,以上名称仅用于说明
通读一遍,它将帮助你处理匕首2并理解更多
编辑:
您也可以在单个模块中提供相同的类类型,使用@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"
您可以使用任何名称字符串,以上名称仅用于说明
通读一遍,它将帮助你处理匕首2并理解更多
编辑:
您也可以在单个模块中提供相同的类类型,使用@Named注释您可以将其注入到多个类中,但不能在多个位置提供它。您似乎不理解模块是什么-您没有为每个要注入的类创建一个模块。您希望为注释提供感谢的每组变量创建一个模块。这是否意味着“@ContributesAndroidInjector(modules={MainActivityModule.class,MainFragmentProvider.class})”是一个组,我可以在其中的一个位置进行注入?在这种情况下,我可以用一个片段模块创建另一个模块吗?您可以将它注入到多个类中,但不能在多个地方提供它。您似乎不理解模块是什么-您没有为每个要注入的类创建一个模块。您希望为注释提供感谢的每组变量创建一个模块。这是否意味着“@ContributesAndroidInjector(modules={MainActivityModule.class,MainFragmentProvider.class})”是一个组,我可以在其中的一个位置进行注入?在这种情况下,我可以用一个模块碎片制作另一个模块吗?谢谢你的回答。我想做的是,我将为viewmodel提供一个factory builder。所以,如果我想把工厂注入到框架和活动中,我必须做什么?如果您有时间,请查看本回购协议中的反馈活动。谢谢你的回答。我想做的是,我将为viewmodel提供一个factory builder。所以,如果我想把工厂注入到框架和活动中,我必须做什么?如果您有时间,请查看本回购协议中的反馈活动。