【问题标题】:The method get(Class<T>) in the type ObjectGraph is not applicable for the argumentsObjectGraph 类型中的方法 get(Class<T>) 不适用于参数
【发布时间】:2013-02-14 14:25:25
【问题描述】:

我试图在我的 android 项目中添加一些依赖注入,所以下面的例子我发现我创建了我的模块

@Module(entryPoints = {MyActivity.class})

public class MyModule {

    private final Context context;

    public MyModule (Context context) {
        this.context = context.getApplicationContext();
    }

    @Provides
    @Singleton
    Context applicationContext() {
        return context;
    }

    @Provides
    @Singleton
    EventBus provideEventBus() {
        return EventBusFactory.create();
    }
}

我有我的申请:

public class MyApplication extends Application{

    private ObjectGraph objectGraph;

    @Override
    public void onCreate() {
        super.onCreate();
        objectGraph = ObjectGraph.get(new MyModule(this));
    }

    public ObjectGraph getObjectGraph() {
        return objectGraph;
    }
}

和活动

public class MyActivity extends Activity {

    @App
    MyApplication application;

    @Inject
    EventBus eventBus;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ObjectGraph objectGraph = application.getObjectGraph();
        objectGraph.inject(this);
    ....

我不确定我做错了什么或错过了什么,但我的 Eclipse 显示错误:

ObjectGraph类型中的get(Class)方法不适用于 参数(MyModuleModule)

在这一行objectGraph = ObjectGraph.get(new MyModule(this));

当我尝试构建时,我得到:

my.android.lib.EventBus 不需要绑定 my.android.app.MyActivity 为 my.android.app.MyModule

谁能告诉我我做错了什么以及我忘记了什么?

【问题讨论】:

    标签: android dagger


    【解决方案1】:

    ObjectGraph类的实例可以通过调用create()静态方法获得。

    试试

    objectGraph = ObjectGraph.create(new MyModule(this));
    

    对于绑定错误,您必须将 EventBus 库添加到您的构建类路径中。

    【讨论】:

    • 我希望在我添加到我的 pom 文件后将我的 lib jar 添加到我的类路径中,那我应该做些额外的事情吗?
    • 好吧,我对 Maven 了解不多,但错误显然表明 EventBus 库不在您的构建类路径中。
    • 你是对的,我没有注意到,我使用了错误的类,但是我的问题的第一部分仍然没有解决,在我遵循你的建议之后,我得到“无法对非静态方法”错误
    • 确实如此。在最早的日子里,静态方法 ObjectGraph.create(SomeModule) 曾经被称为 .get()。我们将其重命名为 create() 是因为我们想使用 myGraph.get(SomeClass.class) 作为从对象图中获取实例的方法,而不是创建图本身。
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2017-09-06
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多