Android 如何使匕首2注射为空?

Android 如何使匕首2注射为空?,android,kotlin,dagger-2,dagger,Android,Kotlin,Dagger 2,Dagger,我将SimpleDynamicString对象注入MVP结构中的演示者。为了避免NullPointerException,我必须实现它 @Provides @StringForTextView static DynamicString provideDynamicString(Application application) { return new SimpleDynamicString(application.getString(R.string.example_string));

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

@Provides
@StringForTextView
static DynamicString provideDynamicString(Application application)
{
    return new SimpleDynamicString(application.getString(R.string.example_string));
}
因为我想把它用作一个库,所以我不得不在任何地方实现它


我可以避免这种情况吗?因此,如果(意外地)忘记,就不会发生NullPointerException?

您的
DynamicString
提供的方法不受限制
StringForTextView
是一个限定符注释(这意味着Dagger可以理解如果您有多个方法,您需要哪个DynamicString)。另外,目前,由于您的方法是非范围的,Dagger在您注入时正在创建新实例

如果要在应用程序中的任何位置使用相同的
DynamicString
实例,需要创建
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));
    }
}
有关作用域的详细信息:


    • 我想你是在问一个问题


      什么是
      SimpleDynamicString
      ?当它被意外地遗忘时,你预计会发生什么。请参阅开头的链接。2.什么也不会发生。现在,当不提供@Provides注释时,我遇到了一个异常。您可以发布您的
      SimpleDynamicString
      class吗?@JoaquimLey@JoaquimLey数据类SimpleDynamicString(val dynString:String):DynamicString{override fun getDynamicString():String{return dynString}
      @BindsOptionalOf abstract CoffeeCozy optionalCozy();