问题标签 [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.

0 投票
3 回答
1356 浏览

inversion-of-control - Castle Windsor - Null 构造函数参数

如何使用 Castle Windsor 传递空构造函数参数?我认为以下会起作用

0 投票
5 回答
8363 浏览

c# - IoC 容器的使用;特别是温莎

我认为这个问题的答案是如此明显,以至于没有人费心写这个,但已经晚了,我真的无法理解这个问题。

我一直在阅读 IoC 容器(在本例中为温莎),但我想念您如何从代码的各个部分与容器对话。

我得到了 DI,我一直在做可怜的人 DI(空构造函数调用具有默认参数实现的重载注入构造函数)一段时间,我完全可以看到容器的好处。但是,我错过了一条重要信息;每次需要从容器中获取服务时,您应该如何引用容器?

我是否创建了一个传递的全局实例?肯定不是!

我知道我应该这样称呼:

(例如)当我想加载我的 XML 配置时,我该如何处理容器?之后每次创建一个新容器是否通过一些内部静态majicks或其他方式持久化加载的配置,或者我是否每次都必须重新加载配置(我猜不是,或者生命周期无法工作)。

未能理解这一点使我无法弄清楚生命周期是如何工作的,并继续使用一些 IoC 可怕的东西

谢谢,

安德鲁

0 投票
1 回答
1164 浏览

inversion-of-control - Castle Windsor:如何以编程方式将列表参数传递给容器?

解析类型时是否可以传递列表构造函数参数?如果可能,我想使用编程配置。我一直在玩参数方法,如下所示,但我还没有偶然发现答案。

DoSomething 类看起来像这样

0 投票
2 回答
238 浏览

dependency-injection - 在我的应用程序中开始使用 Castle Windsor 需要哪些程序集?

我有一个关于如何开始使用 Castle Windsor 的非常基本的问题。我已经阅读了 IOC/DI 并想在现有的解决方案中尝试 Castle Windsor。我通常喜欢将任何外部程序集放在解决方案文件夹树中的 Lib 文件夹中,以便引用是相对的(我相信这是最佳实践)。

我需要将 Castle\Bin... 文件夹中的哪些程序集复制到我的 Lib 文件夹中?我需要为每个程序集添加显式引用还是只添加其中一些?

C:\dev\oss\Castle\Bin\net-2.0 文件夹中有 30 个程序集,C:\dev\oss\Castle\Bin\Dependencies 文件夹中有 18 个程序集。

0 投票
3 回答
284 浏览

oop - 编译器中的控制反转

有没有人在编译器实现中实际使用过控制容器的反转?我知道按照设计,编译器需要非常快,但我一直很好奇 IoC/DI 如何影响编程语言的构造——热交换语法,有人吗?

0 投票
2 回答
590 浏览

inversion-of-control - SFig 语言语法是否高效且清晰(并且比 Spring-Framework 的 XML DSL 更好)?

附录编辑:

由于没有经验丰富的 Spring Framework 开发人员的任何反馈,因此尚未接受对此的回答。

我一直在研究用于 Spring-Framework applicationContext.xml 文件的替代 DSL(其中描述了 bean 初始化和依赖关系以加载到 Spring bean 工厂中)。

我的动机是我完全不喜欢 Spring 为此目的使用 XML,也不喜欢迄今为止设计的任何替代方案。出于各种我不会深入讨论的原因,我想继续使用声明性语言,而不是像 Groovy 这样的命令式脚本语言。

所以我抓住了 ANTLR 解析器工具,并一直在设计一个新的 bean factory DSL,我称之为 SFig。这是一个有关此内容的链接:

SFig™ - Spring-Framework 的替代元数据配置语言

这是源代码存储库站点:

http://code.google.com/p/sfig/

我很想知道到目前为止我在语言语法上的表现如何。您认为 SFig 既高效又清晰易懂?(我现在特别关心多行文本字符串):

0 投票
13 回答
3641 浏览

dependency-injection - 您最常使用哪种松散耦合模式?

最近我看到很多关于如何构建松散耦合应用程序的博客文章。在创建松散耦合的应用程序时,您最常使用哪些模式?依赖注入?控制反转?

0 投票
12 回答
18438 浏览

c# - 编写自己的 IOC 容器

有没有人用 C# 编写过自己的 IOC 容器?还是绝大多数人都使用各种框架,例如 Spring。各自的优缺点是什么?

0 投票
6 回答
2971 浏览

c# - DI/IoC、NHibernate 并帮助他们一起工作

我试图让我的头脑围绕 DI/IoC、NHibernate 并让它们为我正在开发的应用程序很好地协同工作。我对 NHibernate 和 DI/IoC 都很陌生,所以不太确定我正在做的事情是否是明智的做法。这是场景:

该应用程序为用户提供了计算特定金融交易的特定价值(称为保证金)的能力。每个交易的保证金值的计算是通过抽象 MarginCalculator 类的具体实现来执行的,而要使用的具体实现取决于特定交易的产品类型(由产品对象的某个字段给出)。具体的计算器类是通过产品类的属性访问的。IE

用户从下拉列表中选择特定的客户端和产品,并将相应的客户端 ID 和产品 ID 传递到存储库,然后使用 NHibernate 填充产品和客户端对象,然后再将它们注入事务对象。在我当前的设置中,事务通过构造函数依赖注入(尚未使用 IoC 容器)接收其产品和客户端依赖项,即

以下是我希望得到的想法:

A. 是否可以通过 Product 域对象访问 MarginCalculator(本质上是一项服务),或者应该按照此处的建议(http://stackoverflow.com/questions/340461/dependency-injection-with-nhibernate -objects ) 重构代码以从域对象中删除服务依赖项,而是创建一个新的 TransactionProcessor 类,该类将抽象 MarginCalculator 作为依赖项(按照此处描述的内容 ( http://www.lostechies.com ) /blogs/jimmy_bogard/archive/2008/03/31/ptom-the-dependency-inversion-principle.aspx)即

B. 是否可以使用 IoC 容器来获取注入 NHibernate 填充/生成的产品和客户端依赖项的事务对象?即给定一个由用户提供的productId和clientId,是否有可能有类似的东西:

这样容器就解决了 Transaction 对象的 Product 和 Client 依赖关系,NHibernate 用于根据 productId 和 clientId 填充 Product 和 Client,然后将填充的 Product 和 Client 注入到 Transaction?

C.在典型的 DI 场景中,如果类 A 依赖于接口 B,则可能会执行以下操作:

但是,这实际上是所有 DI 示例的显示方式,它假定 IInterfaceB 的实现者(在本例中为 B 类)在设计时是已知的。有没有办法以在运行时确定实现者的方式使用 DI?

非常感谢

马修

0 投票
7 回答
7654 浏览

.net - 温莎城堡有什么缺点吗?

我一直在研究城堡项目,特别是温莎。我对这项技术的可能性印象深刻,拥有如此松散耦合的系统的好处是显而易见的。我唯一不确定的是使用这种方法是否有任何缺点,特别是在 asp.net 中?例如性能命中等。

我正试图让我的开发人员在这里看到这种方法的好处,并受到以下复出的打击:

  1. 那是使用反射,每次从容器调用对象时,都必须使用反射,因此性能会很糟糕。(是这样吗?它是否在每次调用时都使用反射?)

  2. 如果我依赖接口;如何处理具有附加到类上的额外方法和属性的对象?(通过继承)