Kotlin Dagger 2.11

时间:2018-01-22 09:40:42

标签: android kotlin

我试图在片段中注入Dagger 2.11 Retrofit,但我无法注射,

1)问题是AndroidInjection.inject(this)需要DaggerFragment,我无法将BaseFragment更改为DaggerFragment对象,因为它会在替换片段时导致问题

2)我也很难与匕首架构混淆,因为我已经看到了许多匕首2.11或更高版本的演示代码,他们正在为每个活动创建模块。所以我需要为每个活动创建单独的模块和组件

open class BaseFragment : Fragment()

class HomeFragment : BaseFragment() {

    @Inject
    lateinit var retrofit: Retrofit

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

    override fun onAttach(context: Context?) {
       AndroidInjection.inject(activity)
       super.onAttach(context)
    }

    override fun onAttach(activity: Activity?) {
       AndroidInjection.inject(this)
       super.onAttach(activity)
    }

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
        println("----Retrofit----"+retrofit.baseUrl())
        return inflater!!.inflate(R.layout.fragment_home, container, false)
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在片段的OnAttach方法中使用 AndroidSupportInjection.inject(this)而不是AndroidInjection.inject(activity)。

现在看起来应该是

override fun onAttach(context: Context?) {
       AndroidSupportInjection.inject(this)
       super.onAttach(context)
}