Android 如何使匕首2注射为空?
我将SimpleDynamicString对象注入MVP结构中的演示者。为了避免NullPointerException,我必须实现它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));
@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();