问题标签 [dependency-injection]

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 投票
6 回答
9126 浏览

java - 使用 PowerMock 或您让您的测试在多大程度上影响您的设计?

多年来,我一直是 EasyMock 的粉丝,多亏了 SO,我发现了对 PowerMock 的引用,它能够模拟构造函数和静态方法,这两种方法都会在对遗留代码库进行测试时引起问题。

显然,单元测试(和 TDD)的巨大好处之一是它导致(强制?)更清洁的设计的方式,在我看来,PowerMock 的引入可能会减损这一点。我认为这主要表现为:

  1. 回到初始化协作者而不是注入它们
  2. 使用静态而不是让方法归合作者所有

除此之外,关于我的代码被字节码操纵以进行测试的事情并不完全适合我。具体的原因我也说不出来,只是觉得这只是为了测试而不是为了生产,让我感到有些不安。

在我目前的演出中,我们确实在推动单元测试作为人们改进编码实践的一种方式,感觉就像将 PowerMock 引入方程式可能会让人们稍微跳过这一步,所以我不愿意开始使用它。话虽如此,我真的可以看到在哪里使用它可以减少开始测试类所需的重构量。

我想我的问题是,人们对这些功能使用 PowerMock(或任何其他类似库)的经验是什么,您会使用它们吗?您希望您的测试在多大程度上影响您的设计?

0 投票
2 回答
1410 浏览

c# - 使用依赖注入的存储库和专用存储库的装饰器链接

现在,我正试图找出一种更聪明地做事的方法,在此过程中,我设法做的就是在一天内使用一整瓶 excedrin。

假设我有一个像这样的名为 IRepository 的接口。

并假设我有一个像

现在,一切都很好,我可以对存储库执行所有基本操作以支持所有 CRUD 功能,但我可能需要专门的操作,所以假设我有一个这样的界面:

和这样的实现:

好的,这就是基本设置,现在我还想做一件事。我想要透明地进行日志记录和事务以及类似的事情。所以我想做的是使用像 Castle Windsor 或 StructureMap 这样的依赖注入框架,这样当我请求 IRepository 时,我会用 LoggingRepository 和 TransactionRepository 包装它,这两个都实现了 IRepository。

所以,我想做的是这样的:

并让它返回一个包含在 Logging 和 Transaction 装饰器中的用户存储库,但我想不出一种可行的方法。我能想到让它工作的唯一方法是像这样实现 UserRepository:

这意味着我们将使用依赖注入来创建一个修饰的存储库并将其传递给 UserRepository 的构造函数,然后将其用作我们对其运行操作的存储库。这会起作用,但我仍然认为它不是理想的。

所以,我的问题是,我是对的,这是做到这一点的唯一方法,还是我没有正确理解这一点,或者只是错过了一些东西。另外,如果你以前遇到过这个问题,你是如何解决这个问题的?

0 投票
2 回答
380 浏览

dependency-injection - 结构图配置

考虑下面的类

和容器配置

.WithCtorArg仅适用于原语,因此上面的初始化不起作用。

有没有办法用非原始参数配置构造函数?

0 投票
3 回答
2606 浏览

asp.net - 依赖注入一个 HTTPModule

Google/MyBrain 让我失望了。如果不使用框架(我永远无法超越我的同事),鉴于您(程序员)无法控制创建实例,您如何将依赖项注入 HTTPModule?

我们是在破解自定义 web.config 部分 + 反射,还是有一些我没有看到的更干净的东西?

例如,使用 Karl Seguin 的示例模块作为基础,并假设实现了 ILogger。.Net 2.0 固件

正是这样的事情让我意识到我是多么鄙视 MSDN。

0 投票
2 回答
561 浏览

iis - 动态加载 HTTP 模块,可能使用 Unity?

有没有人看过任何关于如何为 IIS 动态加载 HTTP 模块的方法、文档或其他内容?

基本上我要做的是加载 HTTP 模块,我将它们称为 HTTPModuleA、HTTPModuleB 和 HTTPModuleC。但是,可以随时使用 HTTPModuleD、HTTPModuleE 或 HTTPModuleF 更改模块。我基本上想把它们放在配置文件中,但不想有引用或任何东西。我希望能够仅将它们放入特定路径(即程序集的 dll),为文件/路径设置配置文件条目,并让 Unity 或其他框架将它们拾取并加载它们。可能每 2-3 分钟扫描一次更改。

任何关于如何完成这项工作的想法都非常感谢。谢谢!

0 投票
4 回答
1827 浏览

.net - 支持 Compact Framework 的 IoC/DI 容器

他们的任何 IoC 控制器是否可以在 .NET Compact Framework 上运行?

0 投票
2 回答
1733 浏览

c# - 将 IoC 容器引入遗留代码

我正在编写一个新的 .NET 库供我公司内部使用,它将通过依赖注入使用 IoC。当然,如果我们使用 IoC 容器来解析实例,这个库会更容易使用。

但是,将调用此库的代码当前不使用任何类型的依赖注入,并且重构遗留代码以使用 DI 超出了我的项目的范围。那么,在这个遗留代码中开始使用容器从我的新库中获取实例的最佳方法是什么?

如果可能的话,我想避免在我选择的任何 IoC 容器中使用硬引用的旧代码乱扔垃圾。由于我对 DI 比较陌生,因此我们很可能会在某个时候改变我们想要使用哪个 Container 的想法。

如果我将容器包装在 CodePlex 上的CommonServiceLocator库之类的东西中,那会是一种合理的方法吗?

其他人做了什么?

0 投票
6 回答
1344 浏览

.net - 是否有一个 .NET IoC 更喜欢约定而不是配置?

简而言之,如果您必须使用 IoC/DI 容器,那么它很容易部署(不喜欢使用 config/xml 文件来处理所有事情)、稳定、良好的文档并支持 .net,它会是哪一个?

可能只是我,但太多的 xml 文件,比如一个用于应用程序,一些用于 ORM,一些用于另一个组件,有时会让人不知所措。此外,在我看来,如果有一种做事方式(约定),那么搞砸的机会就会减少。

期待您的建议和可能的经验。我主要关心的是可维护性和易于部署。

0 投票
4 回答
615 浏览

java - 使用带有 guice 的依赖注入的可浏览源的项目?

我经常阅读有关依赖注入的信息,并且对 google 进行了研究,理论上我理解它可以做什么以及它是如何工作的,但我希望看到一个使用它的实际代码库(最好是 Java/guice)。

谁能给我指出一个开源项目,在那里我可以看到它是如何真正使用的?我认为浏览代码并查看整个设置比您在网络上找到的介绍文章中的常用片段更能说明问题。提前致谢!

0 投票
1 回答
1549 浏览

java - Felix/OSGi:如何使用不是 OSGi 服务的 SCR 组件?

Apache Felix 的 SCR 允许声明(通过注释或 XML)组件,然后将其实例化、连接到它们的依赖项并注册为 OSGi 服务。

也可以跳过服务注册部分,只让 SCR 创建组件(通过指定@scr.component,但省略@scr.service)。我在想这可能仅对依赖注入(在包中)有用,但是如何使用组件?可以使用scr.reference注入服务,但这不适用于非服务(或者是否)?

直接访问 SCR API 是可行的,但直接与容器服务对话有点违背 DI 的目的。