gpt4 book ai didi

java - Android:Dagger 2 和构造函数注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:08 24 4
gpt4 key购买 nike

我是 dagger 的新手,我的构造函数/方法注入(inject)似乎不起作用。不起作用意味着仍然需要注入(inject)的字段。

这是我的代码:

@Module
public class AppContextModule {

private final Context appContext;

public AppContextModule(Context appContext) {
this.appContext = appContext;
}

@Singleton
@Provides
public Context getAppContext() {
return appContext;
}

}

@Singleton
@Component(modules = {AppContextModule.class})
public interface MyComponent {

void inject(ActivitiesLifeCycleListener obj);

void inject(WebViewManager obj);

Context context();

}

public final class MyClass {

private final WeakReference<Context> mAppContext;

@Inject
public MyClass(Context context) {
this.mAppContext = context
}

}

public class MyActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MyClass my = new MyClass(); // The IDE requests context!

}

}

“MyClass”仍然需要“Context”,尽管我在构造函数上方使用了“@Inject”注解。我错过了什么?

我什至需要公开我的 Context 吗?

谢谢。

最佳答案

嗯...你声明你的构造函数

public MyClass(Context context)  {
this.mAppContext = context
}

然后不带参数调用

MyClass my = new MyClass(); // The IDE requests context!

为什么您认为这应该有效?这是普通的 Java,不涉及 Dagger,您正试图在不提供所需参数的情况下创建一些新对象。


Dagger 并不是改变 Java 工作方式的魔法。要使用构造函数注入(inject),您必须实际使用 Dagger 来注入(inject)您的字段。

public class MyActivity extends BaseActivity {

@Inject
MyClass mMyClass; // mark field for injection

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// todo ... create component

component.inject(this); // inject fields
}

}

鉴于您在某处提供了一个Context(如果不是,您将得到一个Context must be provided...编译错误)然后 Dagger 将注入(inject)您的 Activity 通过调用 inject 使用MyClass——没有魔法。 inject 方法会将对象分配给您的字段。


构造函数注入(inject)仅意味着您不必使用模块并包含提供对象的方法。它不仅神奇地凭空创建对象或改变构造函数的工作方式。

关于java - Android:Dagger 2 和构造函数注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com