我是新手,Dagger2
并尝试构建这样的示例以了解其工作原理。
有我的示例代码:
MainActivity
public class MainActivity extends AppCompatActivity {
@Inject
protected ApiInterface apiInterface;
@Inject
protected Integer valueInt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
App.getComponent().inject(this);
}
public void testButton(View view) {
if (apiInterface == null || valueInt == null) {
Log.e("TAG", "apiInterface == null");
} else {
Log.e("TAG", "apiInterface != null : " + apiInterface.value + " : " + valueInt);
}
}
}
Component
@Singleton
@Component(modules = {ModelModule.class, AnotherModule.class})
interface AppComponent {
void inject(MainActivity mainActivity);
}
Module
@Module
class ModelModule {
@Provides
int provideInt() {
return 1;
}
@Provides
ApiInterface provideApiInterface(int i) {
return ApiModule.getApiInterface(i);
}
}
Module
@Module
class AnotherModule {
@Provides
Integer getInt(){
return 3;
}
}
如您在MainActivity
我注入的样本中所见Integer
@Inject
protected Integer valueInt;
我也想使用int
提供值作为此方法的参数provideApiInterface(int i)
。
最终我得到了这样的错误
Error:(11, 10) error: java.lang.Integer is bound multiple times:
@Provides int com.krokosha.aleksey.daggertwo.ModelModule.provideInt()
@Provides Integer com.krokosha.aleksey.daggertwo.AnotherModule.getInt()
我究竟做错了什么?
我应该如何以正确的方式提供此参数以避免此类错误?
您需要使用
限定符注释
@Module
class ModelModule {
@Provides
@Named("FirstInt")
int provideInt() {
return 1;
}
}
@Module
class AnotherModule {
@Provides
@Named("SecondInt")
int provideInt() {
return 1;
}
}
并在注入依赖时使用此限定符
@Inject
protected ApiInterface apiInterface;
@Inject
@Named("FirstInt") //or whatever you need
protected int valueInt;
希望能帮助到你!另请查看官方文档-http:
//google.github.io/dagger/
承认,匕首是强硬的,我正试图注射改型。我注入了Context和SharedPreferences,它工作得很好,但改型破坏了这一切。它可以识别DaggerRetrofitComponent类,但不能找到DaggerAppComponent。
我想在单元测试模块中使用我的领域管理器。我做的 然后我想实现 但是realmManager为空。如何使用匕首2编写简单的模块测试?我用了匕首模拟,但没有用。我的模块包含 我尝试了谷歌的一切,但我不知道如何从图形中注入对象。
我将json传递给ObjectMapper。JSON字符串如下所示: 我的类如下所示: 这种行为是意料之中的吗?如果是,有什么解决办法? 更新:添加了类描述。
问题内容: 我有一个Core Android Library,我在其中使用@Singleton范围定义一个CoreComponent广告,以注入CoreModule提供的类的实例。 我想从另一个依赖于核心库并且正在使用另一个组件的Android库中访问相同的@Singleton实例。 上面的代码已构建,但是@Singleton范围对于组件是“本地的”。换句话说,有两个单例实例,一个用于CoreCo
我是新来的,用匕首。所以,我不能解决这个有什么问题。我只想问在这里解决它。 这是错误: c:\ Users \ MSI \ Documents \ MyAndroidProjects \ movie projects \ App \ build \ generated \ hilt \ component _ sources \ debug \ com \ example \ movie App
问题内容: 我对此进行了扩展,应该可以帮助我在上下文之间传输对象: 现在它返回的对象,我应该将其强制转换为我想要的类,如下所示: 有没有办法避免这种无用的转换,如果我从类的对象调用使其返回类型? 问题答案: 更新: 有关更好的解决方案 与如何在NSManagedObjectSwift扩展中如何创建托管对象子类的实例中类似,这可以使用通用的辅助方法来完成: 请注意,我已将返回类型更改为。 并 没有