使用匕首2注入服务

我有一个应用程序,基本上是一个运行的服务,并在发生事件时警告用户。

当服务创build警报时,它需要给出它的context以便发生事件时警报可以对服务进行callback

例如:

 public MyService extends Service{ private SomeAlarm alarm; @Override public void onCreate() { super.onCreate(); alarm = new SomeAlarm(MyService.this); } } 

如何将SomeAlarm类注入到服务中,并将SomeAlarm的服务上下文作为variables?

Solutions Collecting From Web of "使用匕首2注入服务"

我从头开始写代码,所以可能会有一两个错字。

你这样做,就像在注入活动时一样。

  1. 声明一个组件,
  2. 将注入方法添加到该组件,
  3. 添加一个提供服务的模块
  4. 创build该组件生成器
  5. 添加你的模块到build设者
  6. 注入您的服务与组件

你的模块和组件看起来像这样(也许增加一些范围)

 @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创build你的组件并注入你的警报。

 @Inject private SomeAlarm alarm; public void onCreate() { DaggerMyServiceComponent.builder() .serviceModule(new ServiceModule(this)) .build() .inject(this); alarm.doStuff(); } 

这是假设您的警报可以通过像这样注入@Inject注释的构造函数注入构造函数:

 class SomeAlarm { @Inject SomeAlarm(MyService service) { /*constructor stuff*/ } } 

否则,您还可以将警报创build添加到您的模块。

有一个类似的问题,原来我打电话给Builder()(大写B)正确的应该是builder(小写字母b)