问题标签 [inversion-of-control]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 什么是温莎城堡,我为什么要关心?
我是一名长期的 Windows 开发人员,对 win32 和早期的 COM 有过初步了解。自 2001 年以来,我一直在使用 .NET,因此我非常精通 C# 和 CLR。在我开始参加 Stack Overflow 之前,我从未听说过温莎城堡。我已经阅读了温莎城堡的“入门”指南,但没有点击。
教这条老狗新技巧,并告诉我为什么要将 Castle Windsor 集成到我的企业应用程序中。
inversion-of-control - 为依赖注入设计类的指南
这个关于单元测试最佳实践的问题提到了为依赖注入设计类。这让我开始思考这究竟意味着什么。
刚刚开始使用控制容器的反转,我对这个问题有一些想法,所以让我把它们扔到墙上,看看有什么能坚持下去。
在我看来,一个对象可以拥有三种基本类型的依赖关系。
- 对象依赖性- 将由相关类使用的实际对象。例如 LogInFormController 中的 LogInVerifier。这些应该通过构造函数注入。如果该类的级别足够高以至于在构造函数中需要超过 4 个这些对象,请考虑将其分解或至少使用工厂模式。您还应该考虑为依赖项提供接口并针对该接口进行编码。
- 简单设置- 例如阈值或超时时间。这些通常应该有一个默认值,并通过工厂模式的构建器进行设置。您还可以提供设置它们的构造函数重载。但是在大多数情况下,您可能不应该强迫客户端必须明确设置它。
- 消息对象- 从一个类传递到另一个类的对象,接收类可能用于业务逻辑。一个示例是 LogInCompleRouter 类的用户对象。在这里,我发现最好不要在构造函数中指定消息,因为您必须在 IoC 容器中注册 User 实例(使其成为全局),或者在您拥有 User 实例之前不实例化 LogInCompleteRouter (为此您不能使用 DI,或者至少需要对容器的显式依赖)。在这种情况下,最好仅在方法调用需要它时才传入消息对象(即 LoginInCompleteRouter.Route(User u); )。
另外,我应该提一下,并不是所有的东西都应该 DI,如果你有一些简单的功能可以方便地分解到一次性类中,那么当场实例化可能是可以的。显然,这是一个判断电话;如果我发现编写一个类如
我可能不会打扰依赖注入它,只会让一个对象直接在 using 块内实例化它。推论是,如果值得为其编写单元测试,那么它可能值得注入。
那你们怎么看?欢迎任何额外的指导方针或对比意见。
language-agnostic - 如何将参数传递给 IOC 框架中的构造函数
如何将参数传递给 IOC 框架中的构造函数?我想做类似的事情:(试图成为 IOC 框架不可知论者;))
这似乎在 StructureMap 中是不可能的。但我很想看到有人证明我错了。
其他框架是否功能更丰富?还是我以错误的方式使用 IOC 框架?
inversion-of-control - 为延迟加载注入数据访问依赖项的正确方法是什么?
当我进行延迟加载时,注入数据访问依赖项的正确方法是什么?
例如我有以下类结构
如何获取对 _customer_dao 的引用到事务对象中?如果我希望事务至少看起来像 POCO,那么为构造函数要求它似乎没有任何意义。让 Transaction 对象直接引用 Inversion of Control Container 可以吗?这也显得很尴尬。
NHibernate 之类的框架如何处理这个问题?
.net - IoC 容器 - 哪个最好?(。网)
我想了解人们对 IoC 容器的使用情况。我读过一些关于温莎城堡的好东西,但我知道很多人使用 StructureMap、Unity、Ninject 等。
提到的那些(以及我忽略的)之间有什么区别。强项?弱点?更合适(比如 StructureMap 对 ABC 很好,但对 XYZ 不太好)?
c# - 如何将对象而不是类型传递给 Windsor 容器?
我有以下课程:
这是演示者代码:
我想将当前实例传递ViewPage
给TPresenter
viaWindsor
而不是让它实例化一个新对象。我怎样才能做到这一点?谢谢。
.net - 我应该使用哪个依赖注入工具?
我正在考虑在我们的用户界面中将 Microsoft Unity 用于我的依赖注入工具。
我们的中间层已经在使用 Castle Windsor,但我认为我应该坚持使用 Microsoft。
有人对最好的依赖注入工具有什么想法吗?
- 自动法
- 城堡微内核/温莎
- PicoContainer.NET
- 拼图.NFactory
- 春天.NET
- 结构图
- 忍者
- 统一
- 简单的喷油器
- NauckIT.微内核
- WINTER4NET
- 对象构建器
oop - 使用回调时如何避免循环依赖?
在设计具有生产者/消费者关系的两个类时,如何避免循环依赖?这里 ListenerImpl 需要一个对 Broadcaster 的引用才能注册/注销自己,而 Broadcaster 需要一个对 Listeners 的引用才能发送消息。这个例子是用 Java 编写的,但它可以应用于任何 OO 语言。
dependency-injection - 我应该如何为 DI/IOC 订购我的 ctor 参数?
我是一个 DI 新手,如果这是错误的方法或愚蠢的问题,请原谅我。
假设我有一个创建/更新订单的表单,并且我知道它需要检索要显示的产品和客户列表。我想传入它正在编辑的 Order 对象,但我也想将 ProductsService 和 CustomersService 作为依赖项注入。
因此,我希望我的 IoC 容器(无论我使用哪个容器)来提供服务,但这取决于调用代码来提供要编辑的 Order 对象。
我是否应该将构造函数声明为将 Order 对象作为第一个参数,然后将 ProductsService 和 CustomersService 声明为,例如:
...或者依赖项应该先出现,Order 对象最后,例如:
有关系吗?这是否取决于我使用的 IoC 容器?或者,还有更好的方法?
spring - 如果我关心 IOC,如何最好地在 Spring MVC 中修改我的模型
我正在使用 Spring MVC 构建一个应用程序。我想为应用程序中的每个控制器对我的模型进行某些更改。特别是,我想将某些额外的数据插入到模型中,这些数据将出现在应用程序的所有页面中。
我可以通过几种方式做到这一点:只需在每个控制器的末尾添加数据,使用模型的子类添加我的额外数据,使用包装我的模型的 ModelAndView 的子类,在使用之前使用包装模型的 VelocityView 的子类它...我确定还有其他选择。
但是我有一个“优雅”的约束:我不想在每个控制器中编写代码,我希望在一个唯一的地方定义这种行为。理想情况下,它将由我的 IOC bean 配置文件控制。
有没有人建议如何优雅地实现这一目标?