问题标签 [ioc-container]

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 投票
2 回答
252 浏览

c# - 为您的控制反转容器反转控制?

我最近不得不将使用 Ninject 1.0 的相对较大的控件库更新到 Ninject 2.0,以帮助解决我在 1.0 中遇到的一些问题。更新进展顺利,我认为 Ninject 2.0 更快。

然而,为了在未来尝试避免这个问题,我创建了自己的用于注入字段和属性的接口(这实际上将调用我希望在当前 Web 应用程序中使用的 IOC 容器上的方法)。所以现在我的控制库独立于任何特定的 IOC 容器,这将加速未来该领域的任何变化。

我想知道有没有其他人做过同样的事情?

我对它所取得的成就感到满意,但理想情况下我想更新它。在我的控件中,我通常将这些注入字段创建为受保护的,并将它们设置在该控件的构造函数中。

我遇到的问题是我必须在所有对象上使用“ref”来实际设置属性,而我不能直接在属性上使用它。

我更愿意按照这些思路做一些事情,但我认为这是不可能的。

有没有人对如何整理代码或使其以更清洁的方式工作有任何想法?我还想避免使用属性,因此它会迫使开发人员决定在控件中的某个点注入变量。

欢迎所有的想法和感受。

谢谢

0 投票
4 回答
983 浏览

dependency-injection - 还有哪些其他 IoC 容器具有类似 IInitializable 的功能?

我在之前的项目中一直在使用 Castle Windsor,我非常喜欢它。对于我当前的项目,我希望使用不同的 IoC 容器。Castle Windsor 自 2007 年以来没有发布任何新版本,并且仍然没有 1.0 版,因此很难证明在商业环境中使用它是合理的。

我喜欢 Castle Windsor 的一件事是,在设置了所有依赖项之后,您可以让容器在您的服务上调用 Initialize 方法,只需让服务实现即可IInitializable。我经常使用这个。它使进行属性注入而不是构造函数注入变得容易,并且可以清理代码和进行相当多的测试。

我一直在寻找 StructureMap、AutoFac、Unity 和 Spring.Net 作为替代方案,但其中只有 Spring.Net 支持类似的东西,它会自动调用一个Init()方法。不幸的是,Spring.Net 并不真正支持我想要使用 IoC 容器的方式(它基于字符串键而不是接口声明注入,因此它的自动装配支持也受到限制)

我是否错过了我查看的 IoC 容器中的类似功能?我使用 IoC 容器的方式是否有问题?或者是否有其他 IoC 容器支持 IIinitializable 或 Init() 之类的东西?

0 投票
1 回答
12610 浏览

dependency-injection - 温莎城堡传递构造函数参数

我有一个带有一些属性的 IAddress 类。然后我有一个实现这个接口的具体类型。这种具体类型有几个我可以使用的不同构造函数。如何在运行时将参数值传递给这些构造函数之一?我不能使用配置文件,因为我将多次重用这个具体类型,并且每次参数值都会不同。

0 投票
5 回答
7486 浏览

c# - 依赖注入解析和单元测试

我正在尝试学习依赖注入并且在对应用程序进行单元测试时遇到了问题。

我正在编写一个控制台应用程序,容器是在 Main() 中创建和初始化的,它可以作为get-propertyin 使用Program.Container,所以我可以在我的应用程序的任何地方调用Program.Container.Resolve<..>().

我有一个这样的 ServiceValidator 类:

在我使用的另一堂课中

这是调用Program.Container.Resolve导致我在单元测试中出现问题的原因,因为它尚未设置。

在容器上调用 resolve 是一种不好的做法吗?我可以在其中创建 ServiceValidator 实例Main()并传递对象,但这似乎很愚蠢,因为它会导致对象的大量参数被传递给下一个方法。

所以我想在一个类中调用 Resolve 是可以接受的,但是必须为单元测试配置容器。我应该怎么做,我应该将容器移动到程序类之外的另一个地方吗?你会推荐什么?

如果重要的话,我正在使用 Unity 和 C#

谢谢 :-)

0 投票
3 回答
711 浏览

java - 如何使用 PicoContainer 管理动态依赖项?

假设我有两个班级 A 和 B,其中 B 取决于 A。

在单个 PicoContainer 中解析 B 很容易。

但我想B为不同的会话提供不同的实例,并使用A. 我正在考虑这样的事情。

上面的代码不起作用,因为当请求sessiona时,B它会向父容器root请求它。 B在那里找到,但只在内部root和它的父母中解决,导致UnsatisfiableDependenciesException.

有什么好的方法可以使这项工作吗?或者这是一种反模式,我以错误的方式解决问题?

0 投票
1 回答
753 浏览

dependency-injection - 与温莎城堡的上下文绑定

是否可以让 Windsor 基于单独的参数返回不同的服务实现?

例如,如果我有一个具有 Role 属性的 User 对象,我希望能够根据 Role 的值不同地水合这个对象。我想使用 IUserService 来执行此操作,但 IUserService 的具体实现由 IoC 容器确定。

我认为 Ninject 将此功能作为“上下文绑定”提供,但我不确定 Windsor 是否在不滚动我自己的解析逻辑的情况下提供它?

0 投票
1 回答
1957 浏览

c# - 如何在 Unity 中使用不同的构造函数注册相同类型两次?

我正在尝试使用两个不同的构造函数注册相同的类型。当我试图解决时,我在第二个 Resolve 上得到“Resolve of the dependency failed ”。

我做错了什么?

0 投票
30 回答
270426 浏览

dependency-injection - 为什么我需要 IoC 容器而不是直接的 DI 代码?

我一直在使用依赖注入(DI),在构造函数、属性或方法中注入。我从来没有觉得需要使用控制反转(IoC) 容器。然而,我读得越多,我就越觉得来自社区的使用 IoC 容器的压力越大。

我使用过 .NET 容器,例如StructureMapNInjectUnityFunq。我仍然看不到 IoC 容器将如何使我的代码受益/改进。

我也害怕在工作中开始使用容器,因为我的许多同事会看到他们不理解的代码。他们中的许多人可能不愿意学习新技术。

请说服我我需要使用 IoC 容器。当我与工作中的开发人员同事交谈时,我将使用这些论点。

0 投票
1 回答
387 浏览

dependency-injection - 温莎城堡 1.0 RC3 和温莎城堡 2.0 有什么区别?

最近,我一直在阅读大量内容并使用 Castle Windsor 1.0 RC3,并且非常喜欢它提供的功能。最近 2.0 发布了,但在接下来的一段时间里,我几乎被 RC3 卡住了。那么考虑到这一点,这两个版本之间有哪些明显的区别,以及在 2.0 上使用 1.0 RC3 时存在哪些缺陷和各自的解决方法?此外,这些差异/陷阱是否会直接影响与 MonoRail 1.0 RC3 的集成?

0 投票
6 回答
8627 浏览

c# - Unity 中有 TryResolve 吗?

ResolutionFailedException如果失败,我怎样才能让 Unity 不抛出Resolve

有没有类似的东西TryResolve<IMyInterface>