Dagger2:是否可以基于 Android 版本进行注入?
Dagger2: Is it possible to inject based on Android Version?
是否可以使用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 {...}
是的,只需决定在 MediaPlayerModule
模块中用 @Provides
注释的具体方法中返回两个实现中的哪一个,returns 通用 MediaPlayer
.
理论上是可行的,我以前没有做过,因为我没有必要,但我认为以下情况可行:
- 您应该有一个父 ApplicationComponent 来定义您的应用程序的需求。我们称它为 ApplicationComponent。
- 现在假设您希望 API21 及以上和 API 低于 21 有 2 个不同的依赖项。您应该创建两个从应用程序组件继承的组件,我们称它们为 Application21Component 和ApplicationBelow21组件。
- 对于这两个组件中的每一个,您都应该有一个不同的 ApplicationModule,它告诉您应用程序组件如何获取所需的依赖项
在您的应用程序中 class "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;
}
是否可以使用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 {...}
是的,只需决定在 MediaPlayerModule
模块中用 @Provides
注释的具体方法中返回两个实现中的哪一个,returns 通用 MediaPlayer
.
理论上是可行的,我以前没有做过,因为我没有必要,但我认为以下情况可行:
- 您应该有一个父 ApplicationComponent 来定义您的应用程序的需求。我们称它为 ApplicationComponent。
- 现在假设您希望 API21 及以上和 API 低于 21 有 2 个不同的依赖项。您应该创建两个从应用程序组件继承的组件,我们称它们为 Application21Component 和ApplicationBelow21组件。
- 对于这两个组件中的每一个,您都应该有一个不同的 ApplicationModule,它告诉您应用程序组件如何获取所需的依赖项
在您的应用程序中 class "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; }