我尝试将Dagger2实现到我的Kotlin项目中,但我对@Inject
注释有问题。
在Java中看起来像这样,这很好用:
public class FooActivity extends Activity {
@Inject
@Named("accessTokenObservable")
public Flowable<Optional<AccessToken>> accessTokenObservable;
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.getGraph().inject(this);
}
}
但我如何在Kotlin写下@Inject
行?
当我使用这个时:
@Inject
@Named("accessTokenObservable")
var accessTokenObservable: Flowable<Optional<AccessToken>>? = null
我收到此错误消息:
Error:Dagger does not support injection into private fields
如果我使用lateinit
:
@Inject
@Named("accessTokenObservable")
lateinit var accessTokenObservable: Flowable<Optional<AccessToken>>
我收到此错误消息:
Error:Flowable<Optional<AccessToken>> cannot be provided without
an @Provides- or @Produces-annotated method.
在Kotlin注入一些东西的正确语法是什么?
答案 0 :(得分:11)
我只是用
@Inject
lateinit var presenter: ItemsPresenter
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
...
}
没有任何问题
答案 1 :(得分:3)
你必须改变你的注射代码:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="list">
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
<ul class="list">
<li>One</li>
<li>Two</li>
</ul>
,它将被修复。
答案 2 :(得分:1)
您是否在代码中的某处提供了Flowable<Optional<AccessToken>> accessTokenObservable
?
如果没有
可以制作Error:Flowable<Optional<AccessToken>> cannot be provided without
an @Provides- or @Produces-annotated method.
。因为你试图在没有提供的情况下注入对象。
在这种情况下,您需要在您的注入器类中提供:
@Provide
@Named("accessTokenObservable")
fun provideAccessTokenObservable : Flowable<Optional<AccessToken>>{
return yourAccessTokenObservable
}
然后你需要在你的活动中注入你的对象
@Inject
@Named("accessTokenObservable")
lateinit var accessTokenObservable: Flowable<Optional<AccessToken>>