对于最近版本的匕首2,所做的改进之一是具有静态提供方法的可能性.简单地说:
@Provides
static A providesA() {
return A();
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何在kotlin做这件事?我试过了
@Module
class AModule {
companion object {
@JvmStatic
@Provides
fun providesA(): A = A()
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
@Provides methods can only be present within a @Module or @ProducerModule
Run Code Online (Sandbox Code Playgroud)
我猜这里有同伴对象,但是我对Kotlin很新,我不确定如何做到这一点.它甚至可能吗?
谢谢!
我可能错过了一些东西,但我认为像@Singleton这样的Scopes用来定义"范围生命周期".
我在Android应用程序中使用Dagger 2(但我不认为这个问题与Android有关).
我有1个模块:
@Module public class MailModule {
@Singleton @Provides public AccountManager providesAccountManager() {
return new AccountManager();
}
@Singleton @Provides public MailProvider providesMailProvider(AccountManager accountManager) {
return new MailProvider(accountManager);
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个不同的组件,@Singleton范围:
@Singleton
@Component(modules = MailModule.class)
public interface LoginComponent {
public LoginPresenter presenter();
}
@Singleton
@Component(
modules = MailModule.class
)
public interface MenuComponent {
MenuPresenter presenter();
}
Run Code Online (Sandbox Code Playgroud)
两者都有,MenuPresenter并且LoginPresenter有一个@Inject构造函数.虽然MenuPresenter期望MailProvider作为参数,但LoginPresenter需要AccountManager:
@Inject public MenuPresenter(MailProvider mailProvider) { ... }
@Inject public LoginPresenter(AccountManager …Run Code Online (Sandbox Code Playgroud)