问题描述
我inject
viewmodels
,repositories
,fragments
,Utils
和...,但这是inject
常见{{ 1}}与class
dependency injection
或Koin
?
假设我们要在Dagger-hilt
中使用StringBuilder()
类
第一种方法:
我们可以fragment
inject
像这样在val otherModule= module {
single { StringBuilder() }
}
中使用它:
fragment
第二种方法:
我们可以在没有class Fragment : BaseFragment(){
private val mPassword : StringBuilder by inject()
}
的情况下创建new
instance
injection
解决方法
不,您根本不会注入通用语言类。没有好处。我们在类需要其他我们不想自己创建的依赖项时注入它们,因此我们让DI框架创建它们。
,我会说这取决于。 Di的主要目标/概念是实现S.O.L.I.D的首要原则,或者如freecodecamp.org所述:
这是S.O.L.I.D的第五项原则-S.O.L.I.D的五项基本原则 Bob叔叔的面向对象的编程和设计– 一个类应该依赖于抽象而不是依赖于具体(在 简单术语,硬编码)。
根据这些原则,一个班级应该集中精力去实现 它的责任,而不是创建它需要的对象 履行这些责任。那就是依赖注入的地方 发挥作用:它为类提供了必需的对象。
here提供了另一个很好的答案,因为在不使用依赖项注入时已经讨论过。
现在我的观点是:如果可能,尝试注入必须经常使用的那些依赖项,如果可能,请通过构造函数注入注入它们。这样,您可以轻松地看到您的类使用了哪些依赖项。尽量不要注入曾经使用过的类或通用语言类。