问题标签 [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 投票
1 回答
215 浏览

c# - 哪些控制反转 (IoC) 容器支持 .NET 1.1?

哪些控制反转 (IoC) 容器支持 .NET 1.1?

0 投票
5 回答
1439 浏览

architecture - 当您需要进行延迟加载(并使用 IOC 容器)时,如何避免循环数据访问对象依赖关系?

注意:以下示例是 C#,但此问题不应特定于任何语言。

因此,我正在使用S# Architecture的变体构建对象域。对于那些不熟悉它的人,为了节省一些阅读时间,这个想法很简单,就是为每个负责加载到/从持久层加载的域对象都有一个数据访问对象接口。可能需要加载/保存给定对象的所有内容都接受该对象的数据访问接口作为依赖项。因此,例如,我们可以有以下内容,其中产品将根据需要延迟加载购买它的客户:

这一切都很好,直到您遇到两个对象需要能够相互加载的情况。例如多对一关系,如上所述,产品需要能够延迟加载其客户,但客户也需要能够获得他的产品列表。

我知道这是一个非常普遍的情况,但我在这方面相对较新。我的绊脚石是实现数据访问对象时要做什么。因为 Customer 依赖于 IProductDao,所以 CustomerDao 实现也必须,反之亦然,ProductDao 必须依赖于 ICustomerDao。

在这里我们遇到了问题。没有 IProductDao 就不能实例化 CustomerDao,反之亦然。我的控制容器(温莎城堡)的反转遇到了循环依赖和阻塞。

我提出了一个临时解决方案,其中涉及延迟加载 DAO 对象本身(我将发布此作为答案),但我不喜欢它。这个问题有哪些久经考验的解决方案?

编辑:以上是我实际使用的架构的简化,我不建议有人实际将 DAO 传递给对象。更接近我实际所做的更好的实现类似于 NHibernate 的工作方式,其中实际对象非常简单,上面实际上是继承和覆盖适当字段的代理对象。

0 投票
1 回答
266 浏览

c# - 如何注入不断变化的依赖项

我是依赖注入的新手,我想知道您将如何处理以下情况。我们有如下内容:

对于 Web 应用程序,每个请求都可以构建不同的 DatabaseContext 以指向不同的数据库。对于 windows 窗体,我们可以更改当前的 DatabaseContext。di 框架如何处理可以更改的依赖项?这样当我请求 IDataAccess 时,它总是具有适当的/当前的 DatabaseContext。

0 投票
3 回答
937 浏览

c# - 测量 C# 代码的可测试性

遇到堆栈溢出的链接后,我发现Miško Hevery的著作非常引人入胜。太好了,我看到了一种新的方法来解决我以前认为我做得很好的事情。

他主要谈论依赖注入、自动化单元测试和良好设计。

他提倡的许多良好实践都是可以通过程序检测到的。所以有一个程序可以检测它们Google Testability Explorer

我的问题是:

  • 是否有与基于 Java 的 Google 可测试性资源管理器等效的 C#?
  • 如果是这样,哪个是最好的?
0 投票
3 回答
7348 浏览

ruby - Ruby 依赖注入库

我一直在研究一些 Ruby 依赖注入库。特别是,我检查了 NeedleCopland。它们已经存在了很长一段时间,但用途并不多。

使用这两个库有哪些优缺点?似乎很多库/框架都可以很好地利用这两个库,例如Merb / Datamapper's Hook

0 投票
8 回答
15625 浏览

wpf - WPF 应用程序是否可以进行依赖注入?

我想开始在我的 WPF 应用程序中使用依赖注入,主要是为了更好的单元可测试性。我的应用程序主要是按照 MV-VM 模式构建的。我正在为我的 IoC 容器寻找Autofac,但我认为这对这个讨论没有太大影响。

将服务注入启动窗口似乎很简单,因为我可以在 App.xaml.cs 中创建容器并从中解析。

我正在苦苦挣扎的是如何将 DI ViewModels 和服务转换为用户控件?用户控件是通过 XAML 标记实例化的,因此它们没有机会Resolve()

我能想到的最好的办法是将容器放在单例中,并让用户控件从全局容器中解析他们的 ViewModel。充其量,这感觉像是一个半途而废的解决方案,因为它仍然需要我的组件依赖于 ServiceLocator。

使用 WPF 可以实现完整的 IoC 吗?

[编辑] - 有人建议使用 Prism,但即使评估 Prism 似乎也是一项巨大的投资。我希望有更小的东西。

[编辑] 这是我停止的代码片段

0 投票
6 回答
1289 浏览

asp.net - 进行 TDD 时如何最好地创建测试数据库?

在做 ASP.NET 站点(例如 ASP.NET MVC 站点)时创建测试持久层的最佳实践是什么?

我见过的许多示例在单元测试项目中使用 Moq(或其他模拟框架),但我想像 .. moq 一样将我的持久层移除,以便我的网站显示数据和内容,但它不是来自数据库。我想最后这样做。我见过的所有嘲笑的东西都只存在于单元测试中。

当人们想要(存根?)伪造一个持久层以实现快速开发时,他们会做什么实践?我使用依赖注入来处理它,并为我的持久层提供了一些硬编码的结果(这真的很手动而且很无聊)。

其他人在做什么?示例和链接会很棒:)

更新

只是一点点更新:到目前为止,我从拥有一个假存储库和一个 SQL 存储库中获得了相当多的里程——每个类都实现了一个接口。然后,使用 DI(我正在使用 StructureMap),我可以在我的假存储库或 SQL 存储库之间切换。到目前为止,它运行良好:)

(想想我在将近 11 个月前问过这个问题也很可怕,从我现在编辑这个问题开始!)

0 投票
4 回答
6838 浏览

c# - 控制台应用程序的 IOC?

谁能想到将 IOC 放入控制台应用程序的好解决方案?

目前我们只是使用具有以下方法的静态类:

我希望体验是无缝的,但想不出从控制台应用程序实现这一点的方法。

0 投票
6 回答
2109 浏览

c# - 构造函数注入和默认重载

假设我们有

和一个消耗它的类

和一个默认实现:

引入这个构造函数是有帮助还是有害?

这是一个普遍的问题,即时间戳不是有趣的部分。

0 投票
6 回答
543 浏览

c# - 国际奥委会设计资源

我已经对此进行了很多搜索,并且没有太多运气找到有凝聚力的东西。我是一个相对较新的开发人员,刚刚开始我的第一个专业开发职位。我知道即使在基础领域我也有很多东西要学。基于收听 PodCast、阅读博客、论文等;我开始明白,在设计和构建软件时考虑分离关注点、IOC、依赖注入似乎是正确的做法。我在非常高的水平上获得了这些概念,并希望尽可能多地接近我对此所做的事情。

所以,这就是问题所在。我怎么会这样设计东西?我在一个团队工作,该团队继承了一个基于 Web 的产品,该产品耦合非常紧密,文档记录非常差,而且通常不容易维护一些软件。Evryone 似乎喜欢移除这对夫妇中的一些人的想法。他们喜欢开发自动化测试的想法(根据我所读到的内容,使用松散耦合的组件更容易做到这一点)。似乎没有人知道该怎么做。我愿意尝试一下,但我需要指导。我发现的一切似乎总是以一种非常高级的方式谈论这些东西,或者相反,只关注整体的一小部分。我想要一些关于一本书、一系列教程、视频或一些东西的指导,这些东西需要一个真实的例子,向你展示如何应用这些原则。理想情况下,

我知道这有点啰嗦,我只是有点沮丧,因为我发现的大多数综合培训材料根本没有以一种开始的人可以从一天开始应用良好实践的方式讨论这个话题一。

谢谢大家的时间。

史蒂夫