请不要仅仅
component.inject(myObject)用于所有事情。始终喜欢使用构造函数注入或从模块中提供构造函数注入,您可以在其中执行其他设置步骤。
.inject(myObject)适用于您无权访问构造函数的framework组件。
我最初的想法是创建各种UtilityComponent和ManagerCompoent,但是我不知道如何让它们与AppModuel或AppComponent中的任何东西一起使用。
您不需要为此单独的组件。见下文。
但是,由于我在Activity,Fragments和ViewModels之外使用这些类,所以我不能只注入它们。
这与注射无关。您在谈论范围,听起来您的实用程序是
@Singleton。您
AppComponent是有
@Singleton作用域的组件,因此它也可以用于提供您的工具。
不过,我在那里我会需要一个实用工具类的情况下,依赖于
Application,对于context
如果它们是
@Singleton可以访问您的应用程序的组件的一部分,则也可以在其他任何地方提供它们。无需更多组件或任何其他东西。只需声明您的依赖项,不要想太多。
只需声明您的util,用批注并用
@Singleton标记构造函数,即可
@Inject进行构造函数注入。
@Singleton确保您将提供它,
AppComponent并且可以访问
Application它所依赖的对象。
@Singleton public class MyUtil { private Application application; @Inject public MyUtil(Application application) { this.application = application; }}然后,您可以将其注入到Activity,Fragments甚至其他工具中。
@Singleton public class MyUtilWrapper { private MyUtil myUtil; @Inject public MyUtilWrapper(MyUtil myUtil) { this.myUtil = myUtil; }}您可以将其中之一或两者都注入您的活动或片段中…
@Inject MyUtil myUtil;@Inject MyUtilWrapper myUtilWrapper;void onCreate(..) { AndroidInjection.inject(this);}你 不会 需要任何模块,提供了一些方法,或组件,以提供简单的类。只要确保添加正确的范围即可!



