我是否有可能使用Dagger2注入基于SDK版本的具体实现?
例如
// MediaPlayerComponent.class
@Component(modules = {MediaPlayerModule.class}
public interface MediaPlayerComponent
{
void inject(MediaPlayerUI ui)
}
// MediaPlayerUI.java
public class MediaPlayerUI
{
@Inject
public MediaPlayer mPlayer;
}
// GingerbreadMediaPlayer.java
public class GingerbreadMediaPlayer extends MediaPlayer {...}
// IceCreamSandwichMediaPlayer.java
public class IceCreamSandwichMediaPlayer extends MediaPlayer {...}
答案 0 :(得分:3)
是的,只需决定在MediaPlayerModule
模块中使用@Provides
注释的具体方法中返回哪两个实现,返回通用MediaPlayer
。
答案 1 :(得分:0)
理论上可以说,我之前没有做过,因为我没有必要,但我认为以下情况可行:
在你的应用程序类中," getComponent"的主体功能将类似于以下
public ApplicationComponent getComponent(){
if (mApplicationComponent == null) {
if (Build.VERSION.SDK_INT >= 21) {
mApplicationComponent = DaggerApplication21Component.builder()
.applicationModule(new ApplicationModule(this))
.build();
} else {
mApplicationComponent = DaggerApplicationBelow21Component.builder()
.applicationModule(new ApplicationModule(this))
.build();
}
}
return mApplicationComponent;
}