Articles of dependency injection

Android片段和dependency injection

正如标题所说,我试图找出哪个是在片段中注入依赖关系的最佳方法。 我想独立于RoboGuice等外部框架 现在,以最简单的方式,我有一个抽象的逻辑的接口,并从一个活动,我想注入这个接口的实现。 我知道我必须为我的片段提供一个默认构造函数,因为系统可能需要在某个时候重新创build片段,创build片段的新实例的常用方法是提供静态方法来处理创build这个: public static Fragment newInstance() { final Bundle bundle = new Bundle(); … final Fragment fragment = new MyFragment(); fragment.setArguments(bundle); return fragment; } 我怎么能传递我的依赖到片段? 我应该使它实现Parcelable或Serializable接口,然后将其打包到Bundle中? 有没有其他方法可以达到这个效果? 谢谢!

什么是“匕首将注入这些字段,如果请求,但不会创build新的实例”是什么意思?

在Dagger2的文档中,它说 如果您的类具有@注入注释字段,但没有@注入注释构造函数,则Dagger将根据请求注入这些字段,但不会创build新实例。 用@Inject注解添加一个没有参数的构造函数来表明Dagger也可以创build实例。 它如何注入字段,但不创build新的实例? 有什么不同?

匕首2和界面的实现

我有一个简单的Dagger 2testing设置,基于http://konmik.github.io/snorkeling-with-dagger-2.html 。 它注入一个PreferenceLogger,输出所有的偏好。 在注入的类中,我可以@注入更多的类。 public class MainActivity extends Activity { @Inject PreferencesLogger logger; @Inject MainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { MyApplication.getComponent().inject(this); presenter.doStuff(); logger.log(this); } } public class PreferencesLogger { @Inject OkHttpClient client; @Inject public PreferencesLogger() {} public void log(Contect context) { // this.client is available } } 当我运行这个,logging器被设置,并在PreferencesLogger.log OkHttpClient被正确设置。 所以这个例子按预期工作。 现在我正在尝试获得一个MVP结构。 有一个MainPresenter接口和一个实现。 […]

匕首不能注入types参数字段

我正在处理一个Android应用程序,我试图注入一个types参数化在抽象类中的字段:BaseListFragment public abstract class BaseListFragment<E, A extends ArrayAdapter<E>, S> extends BaseFragment { @Inject protected S service; } 但是在编译时出现以下错误:error:找不到符号类S 这里是我的代码BaseFragment: public class BaseFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ((App) getActivity().getApplication()).inject(this); } } 这里是我的服务模块: @Module( complete = false, library = true ) public class ServiceModule { @Provides @Singleton BucketService provideBucketService(RestAdapter restAdapter) { […]

匕首2.10 / 2.11注射活动失败

我一直在尝试,在类ViewUtils中注入Activity失败。 我跟着几个不同的职位,但我似乎无法理解我在执行中缺less什么。 我知道这可能是下面的post的重复,我真的很抱歉,但我真的不明白我错过了什么。 这些是我发现的post: Dagger 2.10 Android子组件和构build器 如何在匕首2.10中创build自定义的作用域模块 https://google.github.io/dagger/subcomponents.html 我的实现如下: AppComponent @Component(modules = { AppModule.class, AndroidSupportInjectionModule.class, ActivityBindingModule.class }) @Singleton public interface AppComponent extends AndroidInjector<EmblyApp> { @Component.Builder abstract class Builder extends AndroidInjector.Builder<EmblyApp> {} } ActivityBindingModule @Module public abstract class ActivityBindingModule { @ContributesAndroidInjector abstract LoginActivity loginActivity(); } LoginSubcomponent @Subcomponent(modules = LoginSubcomponent.LoginActivityModule.class) public interface LoginSubcomponent extends AndroidInjector<LoginActivity> { […]

匕首2单件组件取决于单件

我在这里有一个奇怪的问题,我不太清楚为什么我不能做什么。 我有以下模块: @Module public final class AppModule { private Context mContext; @Provides @Singleton @AppContext public Context provideContext() { return mContext; } } @Module public final class NetModule { @Provides @Singleton public OkHttpClient provideOkHttp() { return new OkHttpClient.Builder().build(); } } 由于各种原因,我不希望这两个模块在同一个组件(基本上是由于我的项目结构)。 所以我试图创build以下组件: @Singleton @Component(modules = AppModule.class) public interface AppComponent { @AppContext Context appContext(); } @Singleton @Component(dependencies […]

匕首2中的“HasFragmentInjector”的实际用法是什么?

以前我已经实现了dagger2 v2.2,但是现在他们已经添加了dagger.android部分。 所以我正在创build示例项目。 我意识到旧的方法@Provide和@Modules和@Components等注释,但从匕首2.8+他们已经添加了这个android支持库,也有一些新的注射像@ ActivityKey , @ ContributesAndroidInjector , @ Subcomponent.Builder等 所以我的问题是它带来了什么好处。 它是否解决像基类的Inject方法可以为所有子类工作的问题? 还是其他的好处? 第二个问题 – HasFragmentInjector只是像我们以前使用片段pipe理器一样加载片段的活动? 或者我错过了一些东西? 请不要为所有图书馆用户提供更多信息的问题,因为图书馆的文档不提供这样的答案。

主持人用匕首注射2

我刚开始使用匕首2,我发现在线数以千计的指导每一个不同的实现,我现在有点困惑。 所以基本上这就是我现在写的: AppModule.java: @Module public class AppModule { Application mApplication; public AppModule(Application application) { mApplication = application; } @Provides @Singleton Application providesApplication() { return mApplication; } } DataModule.java: @Module public class DataModule { private static final String BASE_URL = "http://beta.fridgewizard.com:9001/api/"; @Provides @Singleton NetworkService provideNetworkService() { return new NetworkService(BASE_URL); } @Provides @Singleton SharedPreferences provideSharedPreferences(Application app) { […]

Dagger 2命名不能没有@Provides方法提供

试图咆哮匕首2,并与指定的提供商有问题。 我有一个简单的设置如下: // Module @Module class AppModule(private val app: App) { @Provides @AppScope fun providesApp() = app @Provides @AppScope fun provideSharedPreferences(app: App) = PreferenceManager.getDefaultSharedPreferences(app) @Provides @AppScope @Named("Uri1") fun providesUri1() = Uri.Builder().scheme("https").authority("authory1").build() @Provides @AppScope @Named("Uri2") fun providesUri2() = Uri.Builder().scheme("https").authority("authory2").build() } // Component @AppScope @Component(modules = arrayOf(AppModule::class)) interface AppComponent { fun inject(target: MainActivity) } // MainActivity @Inject […]

CustomViewdependency injection与匕首2(在活动范围内)

我的问题与此类似。 例如,我有一个LiveData实现: public class CustomLiveData extends LiveData<SomeEvent> { @Inject public CustomLiveData(@ActivityContext Context context) { //…. } } 我想注入一个自定义视图: public class CustomView extends View { @Inject SomeApplicationProvider anyProvider; @Inject CustomLiveData dataProvider; // Getting @com.di.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. // @com.di.qualifiers.ActivityContext android.content.Context is injected at com.repositories.CustomLiveData.<init>(context) // com.repositories.CustomLiveData is injected at com.ui.CustomView.dataProvider com.ui.CustomView […]