我有一个应用程序,它基本上是一项服务,它始终运行并在发生某些事情时向用户发出警报。
当服务创建警报时,它需要给它自己的context
,以便警报可以在发生事情时对服务进行回调。
例如:
public MyService extends Service{
private SomeAlarm alarm;
@Override
public void onCreate() {
super.onCreate();
alarm = new SomeAlarm(MyService.this);
}
}
如何将 SomeAlarm
类注入(inject)到服务中,并将服务上下文作为变量赋予 SomeAlarm
?
最佳答案
我是从头顶写的代码,所以可能有一两个错字。
您的操作与将内容注入(inject) Activity 时一样。
- 声明一个组件,
- 将注入(inject)方法添加到该组件,
- 添加提供服务的模块
- 创建组件构建器
- 将您的模块添加到构建器中
- 使用组件注入(inject)您的服务
您的模块和组件看起来像这样(可能会添加一些范围)
@Module
class ServiceModule {
MyService mService;
ServiceModule(MyService service) {
mService = service;
}
@Provides
MyService provideMyService() {
return mService;
}
}
@Component(modules=ServiceModule.class)
interface MyServiceComponent {
void inject(MyService service);
}
然后在 onCreate
中创建您的组件并注入(inject)您的警报。
@Inject
private SomeAlarm alarm;
public void onCreate() {
DaggerMyServiceComponent.builder()
.serviceModule(new ServiceModule(this))
.build()
.inject(this);
alarm.doStuff();
}
这是假设您的警报可以通过具有 @Inject
带注释的构造函数注入(inject)构造函数,如下所示:
class SomeAlarm {
@Inject
SomeAlarm(MyService service) {
/*constructor stuff*/
}
}
否则,您也只需将警报创建添加到您的模块中。
关于android - 使用 Dagger 2 注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052261/