下面是类构造函数:
public Salut(SalutDataReceiver dataReceiver,
SalutServiceData salutServiceData,
SalutCallback deviceNotSupported) {
...
}
SalutDataReceiver类作为参数接受对activity的引用。他还接受了回调。下面是类构造函数:
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}
由于存在与activity的刚性链接,因此我假设此对象应从外部传输。下面是模块和组件的类:
@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。但不幸的是,这也不起作用。
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
发布于 2018-08-04 15:53:39
向SalutDataReceiver的构造函数添加@Inject注释,如下所示:
@Inject
public SalutDataReceiver(Activity activity, SalutDataCallback dataCallback) {
}
https://stackoverflow.com/questions/51683594
复制相似问题