Dagger2允许注入为空

bre*_*ine 2 java android dependency-injection dagger dagger-2

所以,简而言之,我对同一个应用程序有很多口味,但略有不同。我想为所有口味独立添加一个导航器。我使用的是 Dagger2,每种口味都有一个子组件,我只为给定的口味注入东西。所以我也想注入一个 Navigator 类。

诀窍是,公共代码中的某些类也使用此导航器,并进行空检查。因此,如果它为空,那很好,但如果不是,则执行 x。

所以我想要一个像这样的字段:

@Inject @Nullable Navigator navigator;
Run Code Online (Sandbox Code Playgroud)

如果没有类似这样的 @Provides 方法,Dagger 会给我一个错误,但这正是我想要的,我希望 @Provides 进入子模块,但仍然注入公共代码库。

我怎样才能实现这个目标?

Dav*_*jak 6

要支持可为空类型,您只需在返回可为空类型的方法@Nullable上添加注释,Dagger 就会接受它。@Provides

如果你不这样做,Dagger 会抱怨你只能从@Nullable带注释的方法中提供可为空的类型。

  • 您还需要在接收端包含 \@Nullable [来源](https://dagger.dev/api/2.12/dagger/Provides.html)“如果 @Provides 方法被标记为 \@Nullable,Dagger 只会也允许注入标记为 \@Nullable 的站点。” (2认同)