- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎每个人都在转向 IoC 容器。我已经尝试“摸索”了一段时间,尽管我不想成为一个在高速公路上走错路的司机,但它仍然没有通过常识对我的考验。让我解释一下,如果我的论点有缺陷,请纠正/启发我:
我的理解:当组合不同的组件时,IoC 容器应该让你的生活更轻松。这是通过 a) 构造函数注入(inject)、b) setter 注入(inject)和 c) 接口(interface)注入(inject)来完成的。然后以编程方式或在容器读取的文件中“连接”它们。然后通过名称召唤组件,然后在需要时手动施放。
我没有得到:
编辑 :(更好的措辞)
如果组件设计得当(使用 IoC 模式、松散耦合),当您可以(恕我直言)更清晰地“连接”应用程序时,为什么要使用不符合语言习惯的不透明容器?这个“托管代码”如何获得重要的功能? (我听说过一些关于生命周期管理的提及,但我不一定明白这比自己动手更好/更快。)
原创 :
为什么要竭尽全力将组件存储在容器中,以不符合语言习惯的方式“连接它们”,在按名称调用组件时使用相当于“goto 标签”的东西,然后丢失很多通过手动转换获得静态类型语言的安全优势,当您通过不这样做来获得等效功能时,而是使用现代 OO 语言提供的所有很酷的抽象特性,例如编程到接口(interface)?我的意思是,实际需要使用手头组件的部分必须知道他们在任何情况下都在使用它,在这里您将使用最自然、惯用的方式进行“接线” - 编程!
最佳答案
肯定有people who think that DI Containers add no benefit ,并且这个问题是有效的。如果纯粹从对象组合的角度来看,容器的好处似乎可以忽略不计。任何第三方都可以连接松散耦合的组件。
然而,一旦你超越了玩具场景,你应该意识到连接合作者的第三方必须承担更多的简单责任。还可能存在退役问题以防止资源泄漏。由于 Composer 是唯一知道给定实例是共享还是私有(private)的一方,它还必须承担起 的角色。终身管理 .
当您开始组合各种实例范围、使用共享服务和私有(private)服务的组合,甚至可能将某些服务的范围限定为特定上下文(例如 Web 请求)时,事情就会变得复杂。用穷人的 DI 编写所有代码当然是可能的,但它不会增加任何商业值(value)——它是纯粹的基础设施。
此类基础设施代码构成 通用子域 ,因此创建一个可重用的库来解决这些问题是很自然的。这正是 DI 容器。
顺便说一句,我知道的大多数容器不使用名称来连接自己 - 他们使用 自动接线 ,它将来自构造函数注入(inject)的静态信息与容器从接口(interface)到具体类的映射配置相结合。简而言之,容器本身就理解这些模式。
DI 不需要 DI 容器 - 它非常有用。
更详细的处理可以看文章When to use a DI Container .
关于inversion-of-control - 反对控制反转容器的论据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667801/
我正在尝试将我在本文档中阅读的内容付诸实践: https://sar.informatik.hu-berlin.de/research/publications/SAR-PR-2006-05/SAR-
我一直在尝试编写一个可以改变这个的 terraform 表达式: subnets = { my_subnet_1 = { nsg = "my_nsg_1", ad
我有一个HashMap,它将两个字符串转换为单词,然后将单词添加到 map 中。我拥有它,以便一个键可以指向多个值。现在我想创建一个循环来反转表,以便所有值都指向键。不要为一个指向多个逆值的键而烦恼。
我对 ~ 运算符有点困惑。代码如下: a = 1 ~a #-2 b = 15 ~b #-16 ~ 是如何工作的? 我想,~a 会是这样的: 0001 = a 1110 = ~a 为什么不呢? 最佳
如果执行 ResourceManager.GetString(Key),您可以获取资源中某个项目的值。有没有一种方法可以进行反向查找以从给定值的资源中获取 key (本质上是反翻译)? 最佳答案 您应
我在 R 中编写了一个代码来反转一个数字。但是我得到了 inf作为输出。 digit0){ rev_num=rev_num*10 + digit %% 10 digit=digit / 10 }
这个问题已经有答案了: Invert keys and values of the original dictionary (3 个回答) 已关闭 9 年前。 我正在寻找在 python 上转置一本字
所以我试图反转我当前制作的形状的输出。我想知道我应该扭转这种情况吗?我尝试更改变量“a”和“c”的值,最终陷入无限循环。 class IRT { public static void main
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: PHP mysql_real_escape_string() -> stripslashes() leavi
从 Wordpress 模板中提取一些预先存在的代码来绘制椭圆阴影。阴影呈椭圆形向下辐射。只有椭圆的下半部分可见,从而形成底部阴影效果。 我只是想“反转”椭圆的“阴影效果”,以便只有阴影的顶部 一半可
我有一个函数应该找到两个弧度的中间 function mrad(rb,ra){return (rb+ra)/2;} 但有时,当我用 Math.sin 和 Math.cos 绘制 x 和 y 时,这两个
给定此代码(http://jsfiddle.net/bzf1mkx5/) .intern { -webkit-animation: in 1s 1 reverse forwards; } .i
我对 ~ 运算符有点困惑。代码如下: a = 1 ~a #-2 b = 15 ~b #-16 ~ 是如何工作的? 我想,~a 会是这样的: 0001 = a 1110 = ~a 为什么不呢? 最佳
我需要以相反的顺序从列表中提取项目(从最后一个条目到第一个)。我设法得到了所有元素,但是,从第一个到最后一个。这是我正在使用的部分代码: 该列表位于不同的网站集上。 using (SPSit
由于一些证书问题,我不得不写 ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chai
是否有一个函数接受一个函数列表和一个输入,并输出一个对输入进行操作的函数列表? 所以像 map,但倒退: >>>map(lambda x: 2*x,[1,2,3,4,5,6,7,8,9]) [2, 4
考虑下表团队消息: 15:10 | Peter | I'm off to the store, call my mobile phone if you need me. 15:11 | Susy |
算法如下: int encryption(int a, int b) { short int c, c2; uint8_t d; c = a ^ b; c2 = c;
我正在寻找一种方法来逆转 a CRC32 checksum .周围有解决方案,但它们要么是 badly written , extremely technical和/或 in Assembly .汇编
使用批处理文件,处理所有在文件名或扩展名中共享字符串的文件就足够简单了,例如: FOR /R %F IN (*.EXE) DO @ECHO %F 但是,如果我想反转文件集的含义怎么办?比如,处理所有不
我是一名优秀的程序员,十分优秀!