首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android Dagger 2.11不能在没有@Inject构造函数或来自@Provides注释的方法的情况下提供

Android Dagger 2.11不能在没有@Inject构造函数或来自@Provides注释的方法的情况下提供
EN

Stack Overflow用户
提问于 2018-08-04 15:47:29
回答 1查看 171关注 0票数 0

下面是类构造函数:

代码语言:javascript
复制
public Salut(SalutDataReceiver dataReceiver, 
             SalutServiceData salutServiceData, 
             SalutCallback deviceNotSupported) {
...
}

SalutDataReceiver类作为参数接受对activity的引用。他还接受了回调。下面是类构造函数:

代码语言:javascript
复制
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}

由于存在与activity的刚性链接,因此我假设此对象应从外部传输。下面是模块和组件的类:

代码语言:javascript
复制
@Module
public class WifiCommunicationModule {

    public WifiCommunicationModule() {

    }

    @Provides
    @Singleton
    public Salut provideSalut(SalutDataReceiver dataReceiver) {
        SalutServiceData serviceData = new SalutServiceData("testService", 50489, "test");
        return new Salut(dataReceiver, serviceData, null);
    }
}


 @Singleton
 @Component(modules = {
            AppModule.class,
            WifiCommunicationModule.class
    })
    public interface MainComponent {
        void inject(MainActivity activity);
    }


public class MainActivity extends AppCompatActivity {

    @Inject
    Salut salut;


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


    }
}

但在编译时抛出异常:

在com.test.modules.WifiCommunicationModule.provideSalut(dataReceiver)注入com.peak.salut.SalutDataReceiver在com.test.components.MainComponent.inject(activity)注入com.peak.salut.Salut在com.test.views.activities.MainActivity.salut注入com.test.views.activities.MainActivity

更新

@Zayniddin Mamarasulov先生建议您从SalutDataReceiver创建一个派生类,并将构造函数标记为@Inject。但不幸的是,这也不起作用。

代码语言:javascript
复制
public class SalutDataReceiverExtension extends SalutDataReceiver {

    @Inject
    public SalutDataReceiverExtension(Activity activity, SalutDataCallback dataCallback) {
        super(activity, dataCallback);
    }
}


@Module
public class WifiCommunicationModule {

    public WifiCommunicationModule() {

    }

    @Provides
    @Singleton
    public Salut provideSalut(SalutDataReceiverExtension dataReceiver) {
        SalutServiceData serviceData = new SalutServiceData("testService", 50489, "test");
        return new Salut(dataReceiver, serviceData, null);
    }
}

错误:(25,10)错误:在没有@Inject构造函数或没有@ android.app.Activity注释的方法的情况下,无法提供注解。在com.test.implementation.SalutDataReceiverExtend.(activity,…注入android.app.Activity )在com.test.modules.WifiCommunicationModule.provideSalut(dataReceiver)注入com.test.implementation.SalutDataReceiverExtend在com.test.components.MainComponent.inject(activity)

注入com.peak.salut.Salut在com.test.views.activities.MainActivity.salut注入com.test.views.activities.MainActivity

EN

回答 1

Stack Overflow用户

发布于 2018-08-04 15:53:39

向SalutDataReceiver的构造函数添加@Inject注释,如下所示:

代码语言:javascript
复制
@Inject
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51683594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档