如何在 Roboguice 中通过构造函数注入参数? [安卓]

2024-01-01

这个问题可能与这个问题完全相同使用 Guice 将参数传递给构造函数 https://stackoverflow.com/questions/9237996/pass-parameter-to-constructor-with-guice

不同之处在于我使用 android 版 roboguice,而不仅仅是 Guice,所以那里的答案对我不起作用。

问题是 - 如何将初始化参数传递到创建的对象中? IE。我已经注入了接口,该接口应该使用 roboguice 不知道的一些参数进行初始化。

我在提供的链接中看到的,我应该创建工厂接口并像这样注册它

  void configure(Binder binder) {
   binder.install(new FactoryModuleBuilder()
         .implement(FooInterface.class, Foo.class)
         .build(FooFactory.class));
  }

但我找不到工厂模块构建器班级。我使用 Intellij IDEA,它可以向我显示我可以在当前位置访问的每个类,并且我可以 100% 确定不存在以以下开头的类'工厂' word.

如何使用 roboguice 创建我的工厂?

UPDATED

我忘记下载了指导辅助注射 http://search.maven.org/#artifactdetails%7Ccom.google.inject.extensions%7Cguice-assistedinject%7C3.0%7Cjar。但我仍然不知道该在哪里注册这个工厂。

UPDATE 2

为什么我需要那个?因为应该存在某些抽象具有 Roboguice 无法解决的依赖关系的情况。这种依赖关系可以是任何类型,甚至是简单的字符串或数字。

就我而言,我在 UI 上有 NumberPicker 控件,并且我想将所有 UI 特定任务移至我的号码选择器包装器班级。当我创建这个包装器时,我通过构造函数注入它的依赖项(此控件)。

如果我对这种方法正确的话,这不是重点,但可能还有很多其他更适用的示例,其中需要构造函数注入,并且 Roboguice 无法创建此注入的类


我按照中给出的答案的步骤进行操作使用 Guice 将参数传递给构造函数 https://stackoverflow.com/questions/9237996/pass-parameter-to-constructor-with-guice并做了一些修改以在 roboguice 下运行它。对我来说完全没问题。

  1. add 指导辅助注射库到 gradle 脚本

    dependencies { compile 'com.google.inject.extensions:guice-assistedinject:4.+' }
    
  2. 创建工厂接口,其创建方法接受对象构造函数所需的参数并返回对象的接口

    public interface ICustomObjectFactory {
        ICustomObject create(String queueName);
    } 
    
  3. Add @Inject对象构造函数的注释和@协助来自工厂的每个参数的注释。

    public class CustomObject implements ICustomObject {
        protected String name;
    
        @Inject
        public CustomObject(@Assisted String name){
           this.name = name;
        }
    }
    
  4. 将绑定添加到您正在使用的模块中

    public class SomeModule extends AbstractModule {
    
        @Override
        protected void configure() {
             install(new FactoryModuleBuilder()
                .implement(ICustomObject.class, CustomObject.class)
                .build(ICustomObjectFactory.class));
        }
    }
    
  5. 注入工厂并创建对象的实例

    public class SomeClass {
    
        @Inject ICustomObjectFactory factory;
    
        public SomeClass () {
            ICustomObject first = this.factory.create("first");
            ICustomObject second = this.factory.create("second");
        }
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Roboguice 中通过构造函数注入参数? [安卓] 的相关文章

  • 如何自定义菜单项的背景颜色?

    我正在尝试定制Toolbar的弹出菜单 现在我无法设置菜单项的背景颜色 我的 styles xml 如下所示
  • Android短音的正确播放方法?

    我正在创建一个应用程序 屏幕上将有多个图像 这些图像将是按钮 点击时会播放短促的声音 我对此进行了研究 只能找到我当前用来播放声音的方法 这似乎根本没有响应 我希望声音能够快速播放并且能够响应多次快速点击 我不确定这在 Android 中是
  • 从响应中获取标头(Retrofit / OkHttp 客户端)

    我正在使用 Retrofit 与 OkHttp 客户端和 Jackson 进行 Json 序列化 并希望获取响应的标头 我知道我可以扩展 OkClient 并拦截它 但这发生在反序列化过程开始之前 我基本上需要的是获取标头以及反序列化的 J
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • Bitmap.getPixels() 中的 IllegalArgumentException

    我想将数据从位图复制到int using getPixels 这是我当前的代码 int pixels new int myBitmap getHeight myBitmap getWidth myBitmap getPixels pixel
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • ExoPlayer2 - 如何使 HTTP 301 重定向工作?

    我开始使用 ExoPlayer 来传输一些音频 一切都很顺利 直到我遇到一个带有 301 永久移动 重定向的 URL ExoPlayer2 默认情况下不处理该问题 我已经看过这个线程 https github com google ExoP
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约
  • 有没有任何代码可以在android中设置壁纸而无需裁剪和缩放?

    我正在创建一个画廊应用程序 我的第一个应用程序 这是我的代码 Bitmap bmd BitmapFactory decodeStream is try getApplicationContext setWallpaper bmd catch

随机推荐

  • 来自:“1 小时前”,至:timedelta + 准确度

    有没有 逆转人性化 时代的功能 例如 给定 字符串 1分钟前 7小时前 5天前 2个月前 可以返回 对伪代码表示歉意 datetime now 时间增量 1 分钟 精度 60 秒 datetime now 时间增量 7 小时 精度 1 小时
  • 解决歧义

    我有一个带有 3 个创建方法重载的控制器 public ActionResult Create public ActionResult Create string Skill int ProductId public ActionResul
  • 如何使用 C++ 将网站设置为 IE、Firefox、Chrome 和 Safari 的主页?

    有没有办法通过 C 或 C 将 google com 这样的网站设置为主页 如何 不确定你的动机是什么 但我不认为这是我希望我的系统上的任何代码从我的手下出发的事情 这听起来像是广告软件 恶意软件会对您的祖父母所做的事情 一旦设置 他们就不
  • 在 localhost 中使用 facebook 登录

    我正在做一个项目 需要使用facebook API作为用户登录 该文档清楚地说明了使用facebook登录的登录按钮的用法 但是 当我在本地主机上测试该按钮时 它没有给我任何信息 没有错误页面 没有弹出窗口 我正在使用 xampp 进行本地
  • 如何指定特定时区的“今天开始”?

    我有一个带有 时间戳与时区 列的表 我想找到时间戳早于今天的所有行 其中 今天 是在特定时区确定的 我知道如何使用at time zone将文字时间戳解释为处于某个特定时区 并且我知道如何使用date trunc以获得这一天的开始 但我不知
  • 如何在 HTML 中调用外部 JavaScript 函数

    我有一小块代码似乎无法工作 我正在构建一个网站并第一次使用 JavaScript 我的 JavaScript 代码位于外部文件 Marq Msg js 中 如下所示 var Messages new Array Messages 0 Thi
  • javascript中的赋值问题[重复]

    这个问题在这里已经有答案了 这是我正在尝试的代码 我唯一的问题是为什么我的代码没有在 projectAreaContextId 中分配 y 的值 编辑1 我已经更正了一些内容 var xhttp new XMLHttpRequest xht
  • Jquery无法在回调函数中访问$(this)

    我正在创建一个插件 但它无法访问 this 我的插件的简单概述是 function fn myPlugin function options callback return this each function this click fun
  • 使用结构时出现编译器错误 C2143

    我正在使用 Visual C 编译一个简单的 c 并使用 Compile as C Code TC 我收到这个编译器错误 错误 C2143 语法错误 缺少 在 输入 之前 在需要简单结构的行上 struct foo test 使用结构体的
  • 如何让 PyC​​harm 更快/更轻? [复制]

    这个问题在这里已经有答案了 我真的很喜欢 PyCharm 的想法并且很想使用它 然而 它会消耗计算机的处理能力和延迟 这是一个很大的缺点 在不久的将来 我将开设一门 Python 入门课程 并建议学生安装 PyCharm 因为它似乎是最友好
  • XSLT: 不起作用

    我的应用程序中有一个 servlet 过滤器 它拦截所有传入的请求 并尝试从传入的 XML 中去除空格 并将生成的 干净 XML 写入响应 我正在使用 XSLT 来实现这一点 请参阅下面的 XSLT
  • 从数据框中删除方括号[重复]

    这个问题在这里已经有答案了 我有以下数据帧格式的 adtaset 我需要从数据中删除方括号 我们该如何进行任何人都可以帮忙吗 From TO wrestle engage in a wrestling match write communi
  • QMap 支持自定义比较器函数吗?

    我找不到设置自定义比较器函数的方法QMap 就像我可以为std map the typename Compare std less lt Key gt 其模板参数的一部分 Does QMap有办法设置吗 没有记录 我认为这是一个错误 htt
  • Boost 测试不 init_unit_test_suite

    我运行这段代码 define BOOST TEST MAIN define BOOST TEST DYN LINK include
  • 一键安装 Ruby/Rails/SQLite?

    我习惯了一键安装本地环境MAMP http www mamp info en index html 是否有 Ruby 等效项 您可以下载并立即获得本地运行的最新版本的 Ruby Rails SQLite 我使用的是运行 Leopard 的
  • Android:选项卡不会用 Holo 主题填充父级?

    下面的代码创建一个包含 4 个选项卡的视图 使用默认主题 androidmanifest xml 中未定义主题 我得到第一个图像 其中选项卡均匀增长以填充可用空间 如果我将主题设置为android theme android style T
  • 非二进制字母表的霍夫曼树?

    对于生成的字母表不是二进制的情况 是否有霍夫曼编码树的简单概括 例如 如果我想通过以三进制写出一些文本来压缩它 我仍然可以为我写出的每个字符建立一个无前缀的编码系统 霍夫曼构造的直接概括 使用 k 叉树而不是二叉树 是否仍能正确有效地工作
  • Sonatype Nexus:如何使用 Amazon S3 作为 Maven 工件的存储?

    我有一个任务来检查如何使我们的内部 Nexus 安装 安装在 CentOs RHEL 上 将工件存储在 Amazon S3 云存储 或任何其他便宜的云存储 中 到目前为止 我只找到了一种解决方案 将 s3 安装为文件系统 例如使用 s3fs
  • 从笔尖实例化视图会引发错误

    我尝试按照此创建 IBDesignable UIView 子类 link http iphonedev tv blog 2014 12 15 create an ibdesignable uiview subclass with code
  • 如何在 Roboguice 中通过构造函数注入参数? [安卓]

    这个问题可能与这个问题完全相同使用 Guice 将参数传递给构造函数 https stackoverflow com questions 9237996 pass parameter to constructor with guice 不同