不确定为什么构建失败。一切似乎都在受控之中
\nclass MapObjectRepositoryIMPL @Inject constructor(\n @ApplicationContext context : Context,\n val mapObjectDao: MapObjectDao,\n val barrechatNetwork: BarreNetwork,\n @DefaultDispatcher private val defaultScope: CoroutineContext\n) : MapObjectRepository {\n\nRun Code Online (Sandbox Code Playgroud)\n@Module\n@InstallIn(ApplicationComponent::class)\nobject DispatcherModule {\n\n @DefaultDispatcher\n @Provides\n fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default\n\n @IoDispatcher\n @Provides\n fun providesIoDispatcher(): CoroutineDispatcher = Dispatchers.IO\n\n @MainDispatcher\n @Provides\n fun providesMainDispatcher(): CoroutineDispatcher = Dispatchers.Main\n}\n\n@Qualifier\n@Retention(AnnotationRetention.BINARY)\nannotation class IoDispatcher\n\n@Qualifier\n@Retention(AnnotationRetention.BINARY)\nannotation class MainDispatcher\n\n@Qualifier\n@Retention(AnnotationRetention.BINARY)\nannotation class DefaultDispatcher\nRun Code Online (Sandbox Code Playgroud)\n我收到的错误是这样的,但看起来我正确提供了所有内容,限定符和对存储库类的注入,这很奇怪......
\nANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser …Run Code Online (Sandbox Code Playgroud) 我在Android项目中使用Dagger进行依赖注入,并且可以编译和构建应用程序.对象图看起来是正确和有效的,但是当我添加dagger-compiler作为依赖以在编译时获取错误时,它会报告一些奇怪的错误:
[ERROR] error: No binding for com.squareup.tape.TaskQueue<com.atami \
.mgodroid.io.NodeIndexTask> required by com.atami \
.mgodroid.ui.NodeIndexListFragment for com.atami.mgodroid \
.modules.OttoModule
[ERROR] error: No binding for com.squareup.tape.TaskQueue<com.atami \
.mgodroid.io.NodeTask> required by com.atami \
.mgodroid.ui.NodeFragment for com.atami.mgodroid.modules.OttoModule
[ERROR] error: No injectable members on com.squareup.otto.Bus. Do you want
to add an injectable constructor? required by com.atami. \
mgodroid.io.NodeIndexTaskService for
com.atami.mgodroid.modules.TaskQueueModule
Run Code Online (Sandbox Code Playgroud)
Otto错误看起来像Eric Burke在他的Android App Anatomy演示文稿中提到的没有@Provides注释,但正如你在下面我看到的那样.
我的Otto和TaskQueue模块如下:
@Module(
entryPoints = {
MGoBlogActivity.class,
NodeIndexListFragment.class,
NodeFragment.class,
NodeActivity.class,
NodeCommentFragment.class,
NodeIndexTaskService.class,
NodeTaskService.class
}
)
public …Run Code Online (Sandbox Code Playgroud) 我想注入一个单身SqliteOpenHelper的ContentProvider.但是,似乎ContentProvider在创建Application实例之前构建实例(getApplicationContext()返回null).我什么时候可以注入数据库?我已经尝试过构造函数和onCreate()方法ContentProvider.
我已经阅读了很多博客,但我仍然无法弄清楚@Module匕首中的注释功能.
@Inject我得到它在运行时提供依赖注入.但是做了什么呢@Module.因为对象图也是建立在模块上的.
例如,我有这段代码来自https://github.com/AndroidBootstrap/android-bootstrap.
@Module(
complete = false,
injects = {
BootstrapApplication.class,
BootstrapAuthenticatorActivity.class,
MainActivity.class,
BootstrapTimerActivity.class,
}
)
public class BootstrapModule {
}
Run Code Online (Sandbox Code Playgroud)
那基本上做了什么呢.因为我也试图使用匕首构建一个应用程序作为android的依赖注入.但是因为我无法@Module清楚地得到概念,所以我只是被卡住了.
任何人都可以帮助我一些基本的例子或概念.我认为这对所有使用匕首的人都有帮助.
在阅读dagger 2的文档时,我无法找到一种简单的方法来在构建应用程序进行测试时提供依赖关系.我发现的唯一线索是:
Dagger 2不支持覆盖.覆盖简单测试假货的模块可以创建模块的子类来模拟该行为.应该分解使用覆盖并依赖依赖注入的模块,以便将被覆盖的模块表示为两个模块之间的选择.
我不明白我将如何在Android上设置这样的配置,任何人都可以解释一下?
我使用Flink(最新通过git)从kafka流到cassandra.为了简化单元测试我通过Dagger添加依赖注入.
ObjectGraph似乎正在正确设置自己,但是'内部对象'被Flink标记为"不可序列化".如果我直接包含这些对象,它们可以工作 - 那么有什么区别?
有问题的类实现了MapFunction和@Inject一个用于cassandra的模块和一个用于读取配置文件的模块.
有没有办法建立这个,所以我可以使用后期绑定或Flink使这不可能?
fwiw - 依赖注入(通过匕首)和RichMapFunction不能共存.Dagger不允许您包含任何在其定义中扩展的对象.
通过Dagger Lazy <t>实例化的对象也不会序列化.
线程"main"中的异常org.apache.flink.api.common.InvalidProgramException:对象com.someapp.SaveMap@2e029d61不可序列化
...
引起:java.io.NotSerializableException:dagger.internal.LazyBinding $ 1
在尝试集成最新的Dagger 2版本时,我遇到了Dagger自动生成的问题.尽管有几个Rebuild和Make Module App进程,但Dagger并没有自动生成DaggerAppComponent.
申请类:
public class BaseApplication extends Application
{
private AppComponent appComponent;
@Override
public void onCreate()
{
super.onCreate();
initAppComponent();
}
private void initAppComponent()
{
DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public AppComponent getAppComponent()
{
return appComponent;
}
}
Run Code Online (Sandbox Code Playgroud)
AppComponent
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
void inject(BaseApplication application);
}
Run Code Online (Sandbox Code Playgroud)
的AppModule:
@Module
public class AppModule
{
private BaseApplication application;
public AppModule(BaseApplication app)
{
application = app;
}
@Provides
@Singleton
Context provideContext()
{
return application;
}
@Provides
Application provideApplication() …Run Code Online (Sandbox Code Playgroud) 我正试图找出一种不那么模板化的方法来实现ActivityModule我在所有应用程序活动中使用的方法.这是我目前的设置:
ActivityModule:
@Module
class ActivityModule(private val activity: Activity) {
@Provides @ActivityScope
fun providesActivity(): Activity = activity
@Provides @ActivityContext @ActivityScope
fun providesContext(): Context = activity
@Provides @ActivityContext @ActivityScope
fun providesLayoutInflater(): LayoutInflater = activity.layoutInflater
@Provides @ActivityContext @ActivityScope
fun providesResources(): Resources = activity.resources
}
Run Code Online (Sandbox Code Playgroud)
AppActivityModule(为AndroidInjectionModule提供活动)
@Module(subcomponents = [
AppActivityModule.WelcomeActivityComponent::class
])
internal abstract class AppActivityModule {
@Binds
@IntoMap
@ActivityKey(WelcomeActivity::class)
abstract fun bindWelcomeActivityInjectorFactory(builder: WelcomeActivityComponent.Builder): AndroidInjector.Factory<out Activity>
@ActivityScope
@Subcomponent(modules = [(ActivityModule::class)])
interface WelcomeActivityComponent : AndroidInjector<WelcomeActivity> {
@Subcomponent.Builder abstract class Builder : AndroidInjector.Builder<WelcomeActivity>() …Run Code Online (Sandbox Code Playgroud) 如何使用Dagger创建自定义范围?
有指导方针吗?我没找到他们.
我正在开发一个Vaadin应用程序,需要一个自定义范围.像UiScoped这样的东西.
最好的祝福
我正在尝试使用Dagger对我正在构建的应用程序执行依赖注入,并且当我有一个包的模块时,根据Injector提供的值(可能是由另一个模块提供),在构建正确的DAG时遇到了麻烦.
如果我有一个简单的模块用于一些可配置的变量(例如,我可能想换掉测试环境)
@Module(
injects = DependentModule.class,
)
public class ConfigModule {
@Provides @Named("ConfigOption") String provideConfigOption() {
return "This Module's configurable option!";
}
}
Run Code Online (Sandbox Code Playgroud)
另一个模块取决于它,例如
@Module(
injects = {
TopLevelClass.class
}
)
public class DependentModule {
@Inject @Named("ConfigOption") String configOption;
public DependentModule() {
ObjectGraph.create(this).inject(this);
doSomethingWithConfig(configOption);
}
@Provides @Singleton UsefulValue provideUsefulValue() {
// Whatever this module needs to do...
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在构造函数中引导注入的行失败了,它抱怨我没有injects在适当的模块中指定显式行.
通过反复试验,我看到如果@Module我添加一行就会消失include = ConfigModule.class,但这会让我觉得语义错误,因为a)我将创建的DAG现在将包含两个模块的值,而不仅仅是一个, b)它首先会破坏DI的目的/灵活性,以便链接特定的模块,而不是简单地让Dagger注入适当的值.
我假设我不应该创建一个this只注入它的对象图?但后来我遇到了没有链接特定模块的问题......
简洁:
addsTovs. …