gpt4 book ai didi

dagger-2 - 它是如何工作的@BindsInstance Dagger 2

转载 作者:行者123 更新时间:2023-12-04 04:51:23 26 4
gpt4 key购买 nike

我最近将 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);
}
}

这些模块(ToastMakerModule 和 SensorControllerModule)用于学习目的,它们获取上下文并实例化,对于实际示例可能不实用
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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com