问题标签 [constructor-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 投票
3 回答
7422 浏览

dependency-injection - 如何配置 Unity 为 IEnumerable 注入数组

我有一个类,它接受一个IEnumerable构造函数参数,我想用 Unity 解析它并注入一个对象数组。这些简单的类说明了这个问题。

假设我想将四个注入SimpleThingCompositeThing. 我已经尝试了以下 Unity 配置的几种变体。

但是我收到错误消息配置设置为注入数组,但类型 IEnumerable`1 不是数组类型。 如果我将构造函数参数更改为IThing[]有效,但我不想这样做。我需要对我的 Unity 配置做些什么才能使其正常工作?

0 投票
2 回答
1091 浏览

asp.net - ASP.Net MVC 中的默认构造函数参数值?

我正在使用带有 Razor 语法的 MVC3,并且正在查看 Apress 书籍“Pro ASP.Net MVC 3 Framework”中的一个示例(非常好)。在其中,作者在 _Layout.cshtml 文件中有这一点:

我的问题与 CartController 类有关。我看到它在其构造函数中传递了一个 Cart 对象,但是上面的 _Layout.cshtml 片段中的代码似乎在RenderAction()调用时没有传递一个?

CartController 片段:

当我调试该方法时,实际上传入了一个 Cart 对象,但我看不到它来自哪里。此示例代码使用 Ninject 作为依赖注入容器,但我在配置中找不到任何证据表明它对 Cart 类有任何了解。MVC 中是否有“默认值”机制?

0 投票
2 回答
1328 浏览

c# - Unity 框架和多构造函数注入

我有一个类作为依赖项:

当我尝试将其注入另一个类时,我收到错误消息

依赖解析失败...... InvalidOperationException - 当前类型 IMyInterface 是一个接口,无法构造。您是否缺少类型映射?

我从未注册IMyInterface过任何具体类型,因为我将此构造函数保留用于其他目的。

根据我的理解,如果没有明确指示要解析哪个,Unity 将首先尝试使用最少参数解析构造函数。所以它会尝试初始化默认的构造函数。

除了我使用之外InjectionConstructorAttribute,有没有一种聪明的方法可以告诉 Unity 忽略第二个构造函数?

0 投票
1 回答
2542 浏览

asp.net-mvc-3 - 用作 Action 方法参数的 View Model 实例的构造函数注入

创建视图模型时,您可以将选项(例如在下拉列表中使用)填充到视图模型的 setter 属性中。问题是,当该视图模型稍后作为参数(由框架!)传递给操作方法时,这些属性值并没有自动重新填充,因此如果由于验证错误需要重新显示表单,则需要再次重新填充这些选项。

我在这个问题中特别要求的一个潜在解决方案是如何使 MVC 框架通过构造函数注入实例化视图模型,这将为视图模型构造函数提供某种数据访问对象的实现(例如存储库) 可用于在视图请求选项时检索选项(例如在辅助方法“DropDownListFor”中)?

我认为该解决方案可能与 IModelBinderProvider 或 IModelBinder 的实现有关,但是在从网上的示例代码片段中试验了这些东西之后,我仍在寻找一个完整的工作示例,具有可下载的可执行代码而没有任何遗漏一块如何把所有的东西放在一起。

如果您正在寻找有关如何填充选择列表的替代讨论,例如使用“Dependecy Lookup”而不是“Dependecy Injection”,您可能需要查看以下讨论:Best way to populate SelectList for ViewModel on GET/POST Best在 GET/POST 上为 ViewModel 填充 SelectList 的方法

几天前,我在那个线程中写了以下关于我现在在这个线程中寻找的“依赖注入”的后续问题: https ://stackoverflow.com/a/8674525/310457 (它提供了一个关于我正在寻找解决方案的问题)

但是,我没有希望有人会找到标题不太具体的旧线程,而是创建了这个新问题,其中包含一个关于我正在寻找的更具体的主题。我还将为任何想要跟进我正在寻找的特定解决方案的人提供从该线程到这个新问题的链接。

0 投票
1 回答
2439 浏览

java - CDI 构造函数注入不适用于瞬态不可序列化依赖项

我非常喜欢 CDI 的构造函数注入,但现在我发现了一个用例,其中构造函数注入显然不能按预期工作。

在我的示例中,我有两个类。类“BeanA”没有定义明确的范围,也没有实现 Serializable。类“BeanB”使用@SessionScoped 进行注释,并实现了可序列化。

当我尝试将 BeanA 的实例注入 BeanB 时,我从 Weld 得到 UnserializableDependencyException,因为 BeanA 不可序列化。这是预期的行为。

当我用“瞬态”标记字段“beanA”时,注入工作没有问题:

现在 Weld 不会抛出任何异常。

这对我来说非常好,但是当我想通过构造函数注入来实现它时,我的理解问题就出现了。当我执行以下操作时,它不再起作用:

使用此代码,我再次获得 UnserializableDependencyException。我认为构造函数注入和字段注入或多或少是等效的,但显然它们不是。我的错误是什么?

0 投票
2 回答
4237 浏览

spring - 如何在 Spring 3.1 中构造函数自动装配 HttpServletResponse?

我有一个请求范围的 bean,我需要访问 HttpServletResponse 和 HttpServletRequest 对象。

我需要在构造函数中访问这些对象,因此属性自动装配不是一种选择。

我做了以下事情:

这给了我以下错误:

未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException: com.foo.bar.MyClass.()

根据此错误消息,它正在寻找一个不存在的无参数默认构造函数。我自动装配了构造函数并将“必需”设置为 true,因此注入器应该选择这个构造函数。由于 bean 是请求范围,这应该可以工作,但事实并非如此。

有任何想法吗?

0 投票
1 回答
192 浏览

.net - 依赖注入 - 构造

我想知道我在这里的想法是否正确,我主要针对接口进行编程,所以我想知道下面的类是否应该通过 DI 注入,或者我应该自己实例化一个类...

注意:这些服务保存在我的核心 libaray 中,而不是我的网络应用程序(asp.net mvc)中

// IUserSession永远不知道,这取决于客户端应用程序,这永远不知道,所以我必须始终注入

// IWorkflowService我需要注入,因为客户端应用程序有几个不同的服务/包,这取决于业务规则可能会有所不同

// IReadonlySession在我的应用程序中只有 1,所以我永远不需要注入?在其他客户端调用中可能会有所不同,但不太可能

// INotificationService将永远是我所说的,它永远是一回事,所以我应该针对接口编程而不是注入?

// IReadonlySession被注入,因为这可能会根据我是否正在运行测试而改变,我可能会使用不同的数据库,或者我可能会从不同的客户端应用程序调用我的代码(不太可能但可能)

问题:

我的对象实例化是否正确?我实施它的方式是否正确?

0 投票
2 回答
227 浏览

architecture - 序列化与 ctor 注入和保护不变量

我可能在这里遗漏了一些明显的东西......

但是当我学会欣赏 IoC 和 ctor 注入的荣耀时,我很难将其与对象图序列化相协调。这两种模式兼容吗?为什么或者为什么不)?

假设有:

我喜欢通过 ctor 注入保护类不变量的铁皮安全。它让我的对象确信他们将永远拥有他们需要的东西。注入不变量是否与存储库模式不一致?也许在某个地方有一个 DTO 层和一个工厂模式可以弥合差距......?

寻找明智的建议...这两种模式兼容吗?为什么或者为什么不)?

PS:我知道 IDeserializationCallback 但我看不出它对“私有只读”不变量有何帮助

0 投票
3 回答
1343 浏览

dependency-injection - 构造函数注入——我们也注入工厂吗?

听了Clean Code Talks之后,我明白了我们应该使用工厂来组合对象。因此,例如,如果 aHouse具有 aDoor并且 aDoor具有 a DoorKnob,则在HouseFactory我们创建一个 newDoorKnob并将其传递给 的构造函数Door,然后将该新Door对象传递给 的构造函数House

但是使用House (比如类名是ABC的类呢?这将取决于,对HouseFactory吧?那么我们是否HouseFactory在 的构造函数中传递ABC? 这样我们就不必在构造函数中传递大量工厂了吗?

0 投票
1 回答
2446 浏览

c# - UNITY:如何使用构造函数注入实现线程安全的 Container.Resolve() 函数?

我在我的项目中使用 Unity 2.0,我在 Parallel.ForEach 代码块中同时读取大量文件:

Resolve(new ParameterOverride("projectFileName", currentFile) 函数有时会抛出 ResolutionFailedException:

这是同时加载同一个文件的时候 - Resolve 函数正在同时创建两个具有相同参数的 IMsBuildProjectLoader 实例。它无法通过 files.Distinct() 过滤器解决。上面的代码只是解释我的问题的代码示例。

问题是:如何实现线程安全的 UnityContainer.Resolve 函数?是否可以使用一些 Unity 扩展类来做到这一点?

IMsBuildProjectLoader

MsBuildProjectLoader

MsBuildProjectLoader 是这样注册的: