在 Dagger 中注入一个需要创建 activity 的对象
Inject in Dagger an object with needs activity to be created
大家好!
请帮我弄清楚我需要应对的场景是否符合 Dagger 的概念。
我必须将 class 注入到我的 Activity 中,这需要创建此 activity。我想到的唯一方法是将 activity 添加到模型并在对象 Provides 方法中使用它。听起来像不是正常的使用场景。
@Module
public class SampleDiModule {
private Activity activity;
public SampleDiModule(Activity activity){
this.activity = activity;
}
@Provides
@ModuleScope
public InjectedObject provideInjectedObject(){
return new InjectedObject.createForAcivity(activity)
}
}
我打算注入一个 activity 展示者,展示者依赖于一个对象,该对象只能通过以下方式由对象工厂创建
public MyPresentor(InjectedObject object){
}
InjectedObject object = InjectedObjectFactory.forActivity(this)
谢谢
好的,有多种方法可以实现。
其中两个在我脑海中浮现。
首先,使用 Dagger 作用域。您可以创建 @Activity 范围,该范围将管理具有特定活动生命周期的对象。创建作用域为 Activity 的 dagger 模块时,您可以传递一个 activity 引用作为构造函数参数,然后使用它。像这样(伪代码):
class ActivityScopedModule {
ActivityScopedModule(Activity: activity) {
this.activity = activity;
}
CustomObject provideCustomObject() {
return new CustomObject(this.activity);
}
}
重要的是,作用域为 activity 的模块必须从 Activity.onCreate()
实例化在这里您可以找到有关创建匕首作用域的更多信息:http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/ Or in this three-part series: https://android.jlelse.eu/dagger-2-part-i-basic-principles-graph-dependencies-scopes-3dfd032ccd82
另一种更简单的方法是,不使用静态 InjectedObjectFactory.forActivity(this)
,将其设为 non-static class InjectedObjectFactory
,使其成为实例dagger 模块为 new InjectedObjectFactory()
,然后从 activity 调用 myInjectedObjectFactory.forActivity(this)
并将其传递给演示者。
大家好!
请帮我弄清楚我需要应对的场景是否符合 Dagger 的概念。
我必须将 class 注入到我的 Activity 中,这需要创建此 activity。我想到的唯一方法是将 activity 添加到模型并在对象 Provides 方法中使用它。听起来像不是正常的使用场景。
@Module
public class SampleDiModule {
private Activity activity;
public SampleDiModule(Activity activity){
this.activity = activity;
}
@Provides
@ModuleScope
public InjectedObject provideInjectedObject(){
return new InjectedObject.createForAcivity(activity)
}
}
我打算注入一个 activity 展示者,展示者依赖于一个对象,该对象只能通过以下方式由对象工厂创建
public MyPresentor(InjectedObject object){
}
InjectedObject object = InjectedObjectFactory.forActivity(this)
谢谢
好的,有多种方法可以实现。
其中两个在我脑海中浮现。
首先,使用 Dagger 作用域。您可以创建 @Activity 范围,该范围将管理具有特定活动生命周期的对象。创建作用域为 Activity 的 dagger 模块时,您可以传递一个 activity 引用作为构造函数参数,然后使用它。像这样(伪代码):
class ActivityScopedModule {
ActivityScopedModule(Activity: activity) {
this.activity = activity;
}
CustomObject provideCustomObject() {
return new CustomObject(this.activity);
}
}
重要的是,作用域为 activity 的模块必须从 Activity.onCreate()
实例化在这里您可以找到有关创建匕首作用域的更多信息:http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/ Or in this three-part series: https://android.jlelse.eu/dagger-2-part-i-basic-principles-graph-dependencies-scopes-3dfd032ccd82
另一种更简单的方法是,不使用静态 InjectedObjectFactory.forActivity(this)
,将其设为 non-static class InjectedObjectFactory
,使其成为实例dagger 模块为 new InjectedObjectFactory()
,然后从 activity 调用 myInjectedObjectFactory.forActivity(this)
并将其传递给演示者。