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

.net - .NET - 您会向该领域的初学者推荐什么 IoC 容器框架?

您会向该领域的初学者推荐什么 Inversion of Control Container 框架?

0 投票
1 回答
4539 浏览

c# - 从 Windsor Container 中删除或覆盖组件

我正在尝试完成一件看似超级简单的事情:从我的单元测试中,我想用模拟/假对象替换正在解析的类型。

例如:xml 配置声明服务 IInterface 的组件应解析为 ClassA。很好,但是从我的单元测试中,我希望类型解析为 FakeClassA。我不能为此使用 container.AddComponent,因为“已经为给定键注册了一个组件......”。

0 投票
3 回答
3600 浏览

dependency-injection - 与城堡温莎的多接口注入

当容器中有多个实现时,如何让 Castle Windsor 在运行时选择正确的接口植入。

例如,假设我有一个名为 IExamCalc 的简单界面,它可以计算某人在考试中的表现。

不,我们有几个这样的实现,例如,

假设正在通过 Windor 重新使用 ExamMarkService 我如何确保在构造函数中注入了正确的实现,这是多租户问题的一个例子吗?

希望一切都有意义

科林·G

0 投票
2 回答
2280 浏览

dependency-injection - 使用 IOC 框架绑定到多个具体实现?

我对 DI/IOC 容器的概念相对熟悉,我曾在之前已经使用它们的项目上工作过。然而,对于这个新项目,没有现有的框架,我不得不选择一个。

长话短说,在某些场景中,我们将为给定接口配置多个实现。环顾网络,似乎使用任何主流框架来选择性地绑定到其中一个实现都非常简单。

然而,在某些情况下,我们需要运行所有配置的实现。我已经在这里搜索了所有 IOC 标记的帖子,我正在尝试翻阅主要框架的文档(到目前为止,查看 Unity、Ninject 和 Windsor),但是文档通常很少,我没有时间检查所有软件包的来源。

那么,是否有任何主流 IOC 容器允许我为我的一项服务绑定到所有已配置的具体类型?

0 投票
1 回答
718 浏览

tdd - IoC 和接口最佳实践

我正在通过摆弄现有项目来尝试使用 IoC 来实现 TDD。简而言之,我的问题是:当对公共和非公共方法感兴趣时,围绕 IoC 的最佳实践是什么?

有两个类:

ThatThing 使用它的 ThisThingBase 引用来调用经常被 ThisThingBase 的后代重载的方法。

Method1 和 Method2 是公开的。Method3 和 Method4 是内部的,仅由 ThatThings 使用。

我想在没有 ThisThing 的情况下测试 ThatThing,反之亦然。

学习 IoC 我的第一个想法是我应该定义一个 IThing 接口,通过 ThisThingBase 实现它并将它传递给 ThatThing 构造函数。IThing 将是客户端可以调用的公共接口,但它不包括 ThatThing 也需要的 Method3 或 Method4。

我是否应该为这两种方法定义第二个接口 - IThingInternal 并将两个接口都传递给 ThatThing?

0 投票
1 回答
429 浏览

inversion-of-control - 使用 StructureMap 链接容器

是否可以像在 WindsorContainer.AddChildContainer() 中一样在 StructureMap 中将容器链接在一起?

我想实现拥有 3 个容器级别;- 1 个页面请求级别 - 1 个会话级别 - 1 个应用程序级别

然后将它们链接在一起,因此只有一个实例请求将发送到“基本级别”容器。

容器的层次其实并不重要,只是是否有能力将它们链接在一起。

0 投票
4 回答
3041 浏览

.net - ResolveAll 做什么

在国际奥委会ResolveAll做什么?我知道官方的答案是“解决所有与此类型匹配的有效组件”。这是否意味着它将返回任何实现给定接口的类?

0 投票
3 回答
2107 浏览

.net - Unity中的“列表注入”?

我有一个项目即将推出,该项目将涉及通过相同的接口连接到一对多的后端系统;我们称它为 IBacksideProvider。

我想使用 Unity 在运行时注入这些提供程序。问题是因为我们谈论的是 1...n 个后端系统,所以我需要注册 1...n 个 IBacksideProvider 的实现。Unity 不支持开箱即用。

然而,这篇博文表明这是可以做到的。我想知道是否有人这样做过或知道如何使用 Unity 以便能够做到这一点。TIA。

0 投票
2 回答
2728 浏览

c# - 如何处理 StructureMap 的 ObjectFactory 中的每个实例对象?

我在我的项目中使用 StructureMap,当应用程序完成运行时,我需要在 ObjectFactory 中实现 IDisposable 的所有 Singleton 实例上调用 Dispose() 方法。

我无论如何都找不到通过 StructureMap API 来做这件事。

我的另一个想法是获取每个实例的引用并自己调用它,但我不知道如何循环遍历所有实例。

0 投票
3 回答
2774 浏览

inversion-of-control - 泛型类型依赖注入:如何注入 T

我想在我的应用程序中以相同的方式处理不同类型的文档因此:我有一个像这样的通用接口。

对于不同类型的文档,我实现了这个接口。

例如:

然后我当然可以做这样的事情:

知道如何在运行时注入 T 以使上面的行松散耦合会很有趣...

但我想根据配置决定我想要我的 FinanceDomcumentProcessor 还是我的 MarketingDocumentProcessor ......因此我也必须在左侧站点上注入 T ......因为我必须使用 c# 2.0 我不能使用魔法词“var”在这种情况下会有很大帮助......但是我怎样才能将它设计为开放和灵活......


很抱歉造成误解并感谢所有评论,但我有另一个挑战示例(也许我为此使用了错误的设计)......但我试一试:同样的情况但不同的解释

我有的示例图像:

ReportingService、Crystal、ListAndLabel 三种不同的报告文档类型。我有一个通用的处理IReportHandler<T>程序(与上面的相同),这个处理程序提供了处理报告文档的所有功能。例如

现在我想使用像 Unity(或其他一些框架)这样的框架进行依赖注入,以通过配置决定我是要使用 CrystalReportingservices还是 List 和 Label。

当我指定我的映射时,我可以注入我的ChrystalReportHandler,但我怎样才能在左侧注入 T 或者更好的词 The Type of ReportDocument

我的问题当然是左侧站点,因为它与类型耦合,但我有我的映射...是否可以基于映射生成对象并分配映射类型?或者基本上也将 T 注入左侧?还是这种方法不适合这种情况。