Questions tagged «dependency-injection»

依赖注入是一种设计模式,其中通过构造函数,方法或字段(属性)设置组件的依赖关系(对象的实例,属性)。它是更一般的依赖项反转的一种特殊形式。

2
逐渐将代码库移至依赖项注入容器
我有一个很大的代码库,其中包含许多“反模式”单例,带有静态方法的实用程序类以及使用new关键字创建自己的依赖项的类。这使得代码很难测试。 我想逐步将代码迁移到依赖项注入容器(在我的情况下是Guice,因为它是一个GWT项目)。从我对依赖注入的理解来看,它全有还是全无。所有类都由Spring / Guice管理,或者没有。由于代码库很大,因此我无法在一夜之间转换代码。所以我需要一种逐渐做到的方法。 问题是,当我从一个需要注入其他类的类开始时,我不能@Inject在那些类中使用简单的类,因为那些类尚未由容器管理。因此,这将创建一条长链,直至未注入任何地方的“顶级”类。 我看到的唯一方法是Injector暂时使/应用程序上下文通过单例全局可用,以便其他类可以从中获取托管bean。但这与不composition root向应用程序公开的重要思想相矛盾。 另一种方法是自下而上:从“高级”类开始,将它们包含在依赖项注入容器中,然后慢慢移至“较小”类。但是然后我不得不等待很长时间,因为我可以测试仍然依赖于全局变量/静态变量的较小的类。 实现这种逐步迁移的方式是什么? PS问题:依赖注入的渐进方法在标题上相似,但是它不能回答我的问题。

2
序列化是否排除了依赖注入的使用?
一个简单的问题:我了解C#中的序列化需要默认构造函数。这将消除使用构造函数注入的DI的可能性(在我的阅读中,通常是DI的首选样式[需要引用])。那么,这真的是一种非此即彼的情况,还是我错过了一些东西? (附带问题):IoC容器是否以某种方式回避了这种折衷方案?

3
依赖注入如何不仅将复杂性移到一个单独的类中?
我本周一直在研究使用Typhoon框架进行依赖注入。我了解到,分离对象的构造对于在单元测试期间用模拟替换任意组件是有好处的,到目前为止,我仅从中看到了好处。 但是我不禁想到,在我拥有一个包含数十个头导入的庞大的视图控制器类之前,现在我有了一个包含数十个头导入的庞大的工厂类。我应该避免参加大量的工厂培训班吗?

3
保持MVC模型与数据库松散耦合?
我喜欢保持我的代码可测试性,并决定对我当前的MVC框架采用依赖注入策略,这无疑已被证明是确保松散耦合的代码,可测试性和模块化的好方法。 但是,由于与设计模式的掌握程度相去甚远,因此我很难找到一种使模型尽可能与数据库连接器类保持松散耦合的好方法。 这怎么办? 由于我没有随此问题提供任何物理代码,因此,我将不胜感激一些逻辑/代码示例或信息,这些示例或信息可为我提供一个理解上述问题的方向。

2
如何通过依赖注入避免UI中疯狂的接口数量?
问题 我最近阅读了很多有关Singletons不好以及依赖注入(我理解为“使用接口”)如何更好的知识。当我使用callbacks / interfaces / DI并遵循接口隔离原则来实现其中的一部分时,我最终陷入了混乱。 UI父级的依赖关系基本上是其所有子级的依赖关系的组合,因此,UI元素的层次结构越深,其构造函数就越肿。 在UI层次结构之上一直是一个Application类,其中包含有关当前选择的信息以及对需要反映更改的3d模型的引用。该应用程序类实现了8个接口,而这仅仅是即将推出的产品(/接口)的五分之一! 我目前正在处理持有当前选择的单例,并且UI元素具有自我更新的功能。该函数滴入UI树和UI元素,然后根据需要访问当前选择单例。这种代码对我来说似乎更干净。 问题 单身人士可能适合该项目吗? 如果没有,那么我的DI思维和/或实施过程中是否存在根本的缺陷,从而使其变得如此繁琐? 有关项目的其他信息 类型:带铃铛的公寓用购物篮 大小:代码和UI 维护2个工作月:没有正在运行的更新,但以后可能是“版本2.0” 环境:在Unity中使用C#(使用实体)组件系统 在几乎所有情况下,用户交互都会触发多个操作。例如,当用户选择一个项目时 显示该项目及其说明的UI部分需要更新。为此,它还需要从3D模型中获取一些信息才能计算价格。 在使用者介面的上方,总价格需要更新 为了显示那里的变化,需要调用3d模型上的类中的相应函数
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.