- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近将 dagger 2.8 更新为 2.9 dagger。和最新版本的文档已添加如下:
-添加@BindsInstance
组件构建器可以轻松绑定(bind)在图之外构建的实例。
-制作人:已添加 ProducerMonitor.ready ()
,当生产者的所有输入都可用时调用。
-删除@Provides(type =...)
用法。使用 dagger.multibindings
中的注释反而。 @Produces.type
也被删除了。
-所有绑定(bind)方法现在都经过验证,即使它们在特定 @Component
中未使用也是如此
- @Component.dependencies
不能再包含 @Modules
.
我想知道这些新功能如何:
谢谢!!
注意:我是 dagger 2 的新手,但您希望能够最大限度地利用这个库。
最佳答案
@bindsInstance 用于从模块中删除构造函数并链接您获取组件的模块。
没有 @BindsInstance
@Module
public class AppModule {
private final Application application;
public AppModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Application provideApplication() {
return application;
}
@Provides
@Singleton
public SharedPreferences providePreferences() {
return application.getSharedPreferences("store",
Context.MODE_PRIVATE);
}
}
public class ToastMaker {
private Application application;
public ToastMaker(Application application) {
this.application = application;
}
public void showToast(String message) {
Toast.makeText(application, message, Toast.LENGTH_SHORT).show();
}
}
@Module
public class ToastMakerModule {
@Singleton
@Provides
ToastMaker provideToastMaker(Application application) {
return new ToastMaker(application);
}
}
@Singleton
@Component(modules = {AppModule.class, ToastMakerModule.class, SensorControllerModule.class})
public interface AppComponent {
void inject(MainActivity mainActivity);
// DaggerAppComponent.build() returns this Builder interface
@Component.Builder
interface Builder {
AppComponent build();
Builder appModule(AppModule appModule);
Builder sensorControllerModule(SensorControllerModule sensorControllerModule);
Builder toastMakerModule(ToastMakerModule toastMakerModule);
}
}
appComponent = DaggerAppComponent
.builder()
.appModule(new AppModule(this))
.sensorControllerModule(new SensorControllerModule())
.toastMakerModule(new ToastMakerModule())
.build();
@BindsInstance
@Module
public class AppModule {
@Provides
@Singleton
public SharedPreferences providePreferences(Application application) {
return application.getSharedPreferences("data",
Context.MODE_PRIVATE);
}
}
@Singleton
@Component(modules = {AppModule.class, ToastMakerModule.class, SensorControllerModule.class})
public interface AppComponent {
void inject(MainActivity mainActivity);
@Component.Builder
interface Builder {
AppComponent build();
// @BindsInstance replaces Builder appModule(AppModule appModule)
// And removes Constructor with Application AppModule(Application)
@BindsInstance
Builder application(Application application);
}
}
appComponent = DaggerAppComponent
.builder()
.application(this)
.build();
关于dagger-2 - 它是如何工作的@BindsInstance Dagger 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42081832/
我最近将 dagger 2.8 更新为 2.9 dagger。和最新版本的文档已添加如下: -添加@BindsInstance组件构建器可以轻松绑定(bind)在图之外构建的实例。 -制作人:已添加
@Named 如何与 @BindsInstance 一起使用?我有这个组件 interface AppComponent : AndroidInjector{ @Component.Build
请帮帮我!我在使用 dagger 2 时遇到了麻烦。 我想通过使用 @Subcomponent.Builder 和 @BindsInstance 在 MainActivity 中绑定(bind)一些运
我是一名优秀的程序员,十分优秀!