2017-02-26 18 views
3

我嘗試將Dagger2實施到我的Kotlin項目中,但我在@Inject註釋中遇到問題。如何注入Kotlin中的var?

在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); 
    } 
} 

但我怎麼也寫在科特林的@Inject線?

當我用這一個:

@Inject 
@Named("accessTokenObservable") 
var accessTokenObservable: Flowable<Optional<AccessToken>>? = null 

我收到此錯誤信息:如果我使用lateinit

Error:Dagger does not support injection into private fields 

@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

看看本主題(HTTP://計算器的.com /問題/ 36199796 /匕首-2-命名不能待提供,而無需-A-提供方法)。命名注射有一些特殊的語法 – Dimezis

+0

謝謝@Dimezis –

回答

2

你必須改變你的注入代碼:

@field:[Inject Named("accessTokenObservable")] 
lateinit var accessTokenObservable: Flowable<Optional<AccessToken>> 

,這將是固定的。

11

我只是用

@Inject 
lateinit var presenter: ItemsPresenter 

override fun onCreate(savedInstanceState: Bundle?) { 
    AndroidInjection.inject(this) 
    super.onCreate(savedInstanceState) 
    ... 
} 

沒有任何問題

+1

稍微偏離主題nitpick,但根據https://google.github.io/dagger/android.html''AndroidInjection.inject(this);''應該之前調用'' super.onCreate(savedInstanceState); '' –

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>> 
相關問題