在Android中,在预定的工作服务中注入依赖项的最佳方式是什么。我的工作服务计划在晚上运行做一些事情。
在JobService构造函数中,我试图在应用程序类上注入依赖项。
MyApp.component().inject(this);
下面是我的应用程序类
public class MyApp extends Application {
private static AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
buildAppComponent();
}
public static AppComponent component(){
return appComponent;
}
private void buildAppComponent(){
if(appComponent == null){
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
}
}
您应该使用AndroidInjector来注入android类,如Activities/Fragments/Services/BroadcastReceivers/ContentProviders。
首先,确保在构建中添加了dagger-android依赖项。gradle
implementation 'com.google.dagger:dagger:2.16'
implementation 'com.google.dagger:dagger-android:2.16'
implementation 'com.google.dagger:dagger-android-support:2.16'
annotationProcessor 'com.google.dagger:dagger-compiler:2.16'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.16'
然后确保应用程序组件继承自AndroidInjector
@Singleton
@Component(modules = {AndroidSupportInjectionModule.class,
ApplicationModule.class,
ActivityBuilderModule::class,
ServiceBuilderModule::class})
public interface ApplicationComponent extends AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(MyApp application);
ApplicationComponent build();
}
}
@Module
abstract class ActivityBuilderModule {
@ContributesAndroidInjector(modules = {MainActivityModule.class})
@ActivityScope
abstract MainActivity contributeMainActivity();
@ContributesAndroidInjector(modules = {DummyModule.class})
@ActivityScope
abstract DummyActivity contributeDummyActivity();
//...
}
@Module
abstract class ServiceBuilderModule {
@ContributesAndroidInjector
abstract MyService contributeAuthenticatorService();
//...
}
下面是您的MyApp
应该是什么样子
public class MyApp extends DaggerApplication() {
private ApplicationComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
appComponent = DaggerApplicationComponent.builder()
.application(this)
.build();
}
AndroidInjector<? extends DaggerApplication> applicationInjector(){
return appComponent;
}
}
您的服务现在应该是可注入的了,为了将其打包,您当然还需要注入片段,因此例如对于MainActivity
片段,您将从MainActivityModule
中创建一个FragmentBuilderModule
fragmentBuilderModulefragmentBuilderModule
@Module(includes = {FragmentBuilderModule.class})
abstract class MainActivityModule {
@Binds
@ActivityScope
abstract AppCompatActivity bindActivity(MainActivity activity);
//...
}
这里是FragmentBuilderModule
类
@Module
abstract class FragmentBuilderModule {
@ContributesAndroidInjector(modules = {HomeFragmentModule.class})
@FragmentScope
abstract HomeFragment contributeHomeFragment();
@ContributesAndroidInjector(modules = DummyFragmentModule.class})
@FragmentScope
abstract DummyFragment contributeDummyFragment() ;
//...
}
您可以从我的项目模板中看到更多,尽管它是Kotlin。
本文向大家介绍Dagger2 Android依赖注入学习笔记,包括了Dagger2 Android依赖注入学习笔记的使用技巧和注意事项,需要的朋友参考一下 前言 最近在用 MVP + RxJava + Retrofit 写项目,觉得相对于其他的开发框架,这的确是给我们带来了很多方便,但是在网上搜寻相关资料的时候,总是能看到 MVP + RxJava + Retrofit + Dagger 这样的搭
我得到以下生成错误: 错误:[dagger.android.androidinjector.inject(T)]没有@provides-annotated方法,无法提供android.support.v4.app.fragmentManager。 公共抽象接口AppComponent扩展dagger.android.androidinjector{^android.support.v4.app.f
我正在使用垃圾,模拟和模拟MVC来测试网络应用程序的工作。我正在与一个我无法弄清楚的注入的依赖关系作斗争。我的网络应用程序结构如下。 和服务级别 我需要测试此控制器的搜索方法,但是service2当前不活动,因此必须模拟对它的调用。我可以模拟service2,但不知道如何在控制器的mockMVC实例中注入service2的模拟。据我所知,mockito中的@InjectMocks只注入一层深度的m
我有一个控制器 服务接口 我想在我的控制器中使用@autowired来使用该服务,但当我运行应用程序时,我得到以下错误 org.springframework.beans.factory.beanCreationException:创建名为“demo application”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Facto
问题内容: 这是我目前拥有的并且可以正常工作: 现在,我想添加另一个依赖项。我将其更改为: 但是现在我收到此错误消息: FragmentFacebookLoginComponent依赖于多个作用域组件 我该如何解决?我如何有多个依赖关系? 如果我从一个组件中删除范围,则会收到此错误消息: AnotherComponent(无作用域)不能依赖范围内的组件 问题答案: 最后,我创建了一个具有正确范围的
在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa