【问题标题】:How can I make a Dagger2 injection nullable?如何使 Dagger2 注入可以为空?
【发布时间】:2018-01-31 14:17:19
【问题描述】:

Here 我在 MVP 结构中将 SimpleDynamicString 对象注入我的演示者。为了避免 NullPointerException,我必须实现它。

@Provides
@StringForTextView
static DynamicString provideDynamicString(Application application)
{
    return new SimpleDynamicString(application.getString(R.string.example_string));
}

因为我想把这个用作库,所以我不得不到处实现。

我可以避免这种情况,所以如果(意外或没有)忘记,不会发生 NullPointerException?

【问题讨论】:

  • 什么是SimpleDynamicString?如果不小心忘记了,您希望发生什么?
  • 1.请参阅开头的链接。 2. 什么都不会发生。现在我得到一个异常,当不提供 @Provides 注释时。
  • 你能发布你的SimpleDynamicString课程吗?
  • @JoaquimLey 数据类 SimpleDynamicString(val dynString: String) : DynamicString { override fun getDynamicString(): String { return dynString } }

标签: android kotlin dagger-2 dagger


【解决方案1】:

您的DynamicString 的提供方法没有作用域。 StringForTextView 是一个限定符注解(意味着 Dagger 可以理解你想要哪个 DynamicString如果你有多个提供方法)。目前,由于您的提供方法是无范围的,因此 Dagger 在您注入时正在创建新实例。

如果您想在应用程序的任何地方使用DynamicString 的相同实例,您需要创建一个Singleton 组件,将此提供方法放入Singleton 模块中,并使该方法的范围Singleton。如果你把它设为Singleton,你可以编写一个提供方法并在任何地方注入。

@Singleton
@Component(modules = {SingletonModule.class})
public interface SingletonComponent {

    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder application(Application application);

        Builder singletonModule(SingletonModule singletonModule);

        SingletonComponent build();
    }

    void inject(YourClassToInject yourClassToInject);

}

@Module
public class SingletonModule {

    @StringForTextView // this is qualifier annotation
    @Singleton // this is scope annotation
    @Provides
    DynamicString provideDynamicString(Application application)
        return new SimpleDynamicString(application.getString(R.string.example_string));
    }
}

有关范围的更多信息:

【讨论】:

    【解决方案2】:

    我想你问的是optional binding

    @BindsOptionalOf abstract CoffeeCozy optionalCozy();
    

    【讨论】:

      猜你喜欢
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      相关资源
      最近更新 更多