用依赖注入注入 common class 是好方法吗?
Is it good way to inject common class with dependency injection?
我 inject
viewModels
,repositories
,fragments
,Utils
和...但是 inject
common 的好方法吗class
与 dependency injection
Koin
或 Dagger-hilt
?
假设我们要在fragment
中使用StringBuilder()
class
第一种方法:
我们可以inject
它
val otherModule= module {
single { StringBuilder() }
}
并像这样在 fragment
中使用它:
class Fragment : BaseFragment(){
private val mPassword : StringBuilder by inject()
}
第二种方法:
我们可以在没有 injection
的情况下创建 new
instance
class Fragment : BaseFragment(){
private var mPassword = StringBuilder()
}
我的问题是第一种方法是我们常用的方法吗?
不,您根本不会注入通用语言 类。它没有任何好处。当它们需要我们不想自己创建的额外依赖项时,我们注入 类,因此我们让 DI 框架创建它们。
我会说这取决于。 Di 背后的主要目标/概念是实现 S.O.L.I.D 的第五原则,或者如 freecodecamp.org 所说:
It is the fifth principle of S.O.L.I.D — the five basic principles of
object-oriented programming and design by Uncle Bob — which states
that a class should depend on abstraction and not upon concretions (in
simple terms, hard-coded).
According to the principles, a class should concentrate on fulfilling
its responsibilities and not on creating objects that it requires to
fulfill those responsibilities. And that’s where dependency injection
comes into play: it provides the class with the required objects.
提供了另一个很好的答案here,因为已经讨论过何时不使用依赖注入。
现在我的意见是:如果可能的话,尝试注入那些你必须经常使用的依赖项,如果可能的话,通过构造函数注入来注入它们。有了这个,你可以很容易地看到,你的 class 使用了哪些依赖项。尽量不要注入使用过一次的 classes 或通用语言 classes.
我 inject
viewModels
,repositories
,fragments
,Utils
和...但是 inject
common 的好方法吗class
与 dependency injection
Koin
或 Dagger-hilt
?
假设我们要在fragment
StringBuilder()
class
第一种方法:
我们可以inject
它
val otherModule= module {
single { StringBuilder() }
}
并像这样在 fragment
中使用它:
class Fragment : BaseFragment(){
private val mPassword : StringBuilder by inject()
}
第二种方法:
我们可以在没有 injection
new
instance
class Fragment : BaseFragment(){
private var mPassword = StringBuilder()
}
我的问题是第一种方法是我们常用的方法吗?
不,您根本不会注入通用语言 类。它没有任何好处。当它们需要我们不想自己创建的额外依赖项时,我们注入 类,因此我们让 DI 框架创建它们。
我会说这取决于。 Di 背后的主要目标/概念是实现 S.O.L.I.D 的第五原则,或者如 freecodecamp.org 所说:
It is the fifth principle of S.O.L.I.D — the five basic principles of object-oriented programming and design by Uncle Bob — which states that a class should depend on abstraction and not upon concretions (in simple terms, hard-coded).
According to the principles, a class should concentrate on fulfilling its responsibilities and not on creating objects that it requires to fulfill those responsibilities. And that’s where dependency injection comes into play: it provides the class with the required objects.
提供了另一个很好的答案here,因为已经讨论过何时不使用依赖注入。
现在我的意见是:如果可能的话,尝试注入那些你必须经常使用的依赖项,如果可能的话,通过构造函数注入来注入它们。有了这个,你可以很容易地看到,你的 class 使用了哪些依赖项。尽量不要注入使用过一次的 classes 或通用语言 classes.