在 Roboguice 中使用依赖注入?

Posted

技术标签:

【中文标题】在 Roboguice 中使用依赖注入?【英文标题】:Using Dependency Injection with Roboguice? 【发布时间】:2011-09-08 21:33:10 【问题描述】:

我正在开发一个 android 项目,我想知道有关构建 Android 应用程序的良好架构的任何建议。

我想通过 Roboguice 使用依赖注入,并且我一直在阅读有关 MVVM 模式或 MVC 模式 (Android MVVM Design Pattern Examples) 的信息。

我还知道 roboguice 有一个非常酷的基于上下文的事件的引发和处理功能,当代码被解耦时,它可以非常容易测试。

对可行的设计模式有什么建议吗?您曾使用或开发过可测试且可扩展的架构?

【问题讨论】:

这些对于任何 UI 应用程序都是很好的,而 DI 对于可测试性特别有用。但是大多数设计模式都是情境性的,所以你必须编写一些代码并找出一些你想要解决的低级问题,然后才能找到许多有用的模式。 如果您在这里搜索"android design-patterns architecture",您可能会找到一些指导。 如果您查看 GoF 的书,您会发现模式将在各个地方使用。您的活动可能是控制器模式(应该),内容提供者将是数据访问模式。您会发现模式可能有用的其他地方,但如前所述,这取决于要使用的模式的情况。 应用程序应该是单例的。 感谢您的所有 cmets,我将尝试深入研究作为控制器的活动,以便代码更清晰,我过去的经验是在活动上使用一堆代码,这很难测试 【参考方案1】:

Android 平台提供了一组通用的设计模式,与 Web 应用相比,您获得的硬件资源有限,通常最好还是坚持直接在生产代码中使用这些模式。还有其他一些框架可以“包装”基本平台。如果您有特定目的(或者可能用于原型设计/实验),这些都值得研究,但为了获得最佳支持水平,您通常最好坚持使用标准组件。

这是处理 UI 解决方案时的一个很好的资源:@​​987654321@

专门针对 DI:有一个 Spring framework for Android,我玩过它,它看起来很有希望。您已经提到 Roboguice 作为另一种选择。但是,为了避免性能和库开销,我仍然发现最简单的方法是编写一个简单的基于反射的类,在我自己的代码中注册和注入依赖项。类似于this approach,除了我通常将注入代码移动到一个单独的单例中并从那里引用它。

根据我的经验,大多数第三方产品目前还不够成熟,无法依赖,并且除了基本平台提供的功能之外,并没有真正为您提供太多帮助。但是,它们在不断进步,因此请务必不时尝试大牌。

【讨论】:

很好的答案! Spring Android 很棒,但它目前只提供集成库,AFAIK 中没有 DI。 RoboGuice 也不错,但反射 API 在某些设备上会带来性能成本。 AndroidAnnotations 在编译时做同样的事情。很想听听您对此的反馈:)。 AndroidAnnotations 看起来确实很有趣。我已将其添加为书签,以备下次开发 Android 应用时使用,一旦有机会尝试,我会提供一些反馈。

以上是关于在 Roboguice 中使用依赖注入?的主要内容,如果未能解决你的问题,请参考以下文章

Android 片段和依赖注入

SherlockActivity也可以用依赖注入的方法:

Android片段和依赖注入

注入框架RoboGuice使用:(Your First Injected Fragment)

注入框架RoboGuice使用:(Your First View Injection)

RoboGuice注入框架简单应用